edition = "2023";

package milotic_fast_sanity;

import "fru_component_model.proto";
import "memory.proto";
import "processor.proto";
import "status.proto";

message GetAllFruInfoRequest {
  // Optional filter by the general component node type.
  // Only FRUs matching these types will be returned.
  // This is an OR filter.
  repeated ComponentType filter_by_fru_type = 1;

  // Optional filter by the FRU class.
  // Only FRUs matching this FruClass will be returned.
  repeated ComponentClassification filter_by_fru_class = 2;

  // Optional filter by an identifier's value.
  // This is an OR filter.
  repeated UniqueIdentifier filter_by_identifier_value = 3;

  // List of expected FRU components.
  repeated UniqueIdentifier expected_fru_components = 4;

  enum FruScanType {
    FRU_SCAN_TYPE_UNSPECIFIED = 0;
    // Performs a scan of the expected FRUs only provided in the request.
    FRU_SCAN_TYPE_EXPECTED_ONLY = 1;
    // Performs a scan of all FRUs on the system.
    FRU_SCAN_TYPE_ALL = 2;
  }

  // Optional filter by the type of FRU scan to perform.
  // If unspecified, defaults to FRU_SCAN_TYPE_ALL.
  FruScanType fru_scan_type = 5 [default = FRU_SCAN_TYPE_ALL];
}

message GetAllFruInfoResponse {
  repeated FruComponent fru_components = 1;
}

message GetFruInfoDeterministicallyRequest {}

message Fru {
  string barepath = 1;
  milotic_tlbmc.PresenceStatus presence_status = 2;
  oneof fru_info {
    milotic_tlbmc.Processor processor_info = 3;
    milotic_tlbmc.Memory memory_info = 4;
  }
}

message GetFruInfoDeterministicallyResponse {
  repeated Fru frus = 1;
}

service FruService {
  // Get the FRU information for a given component.
  rpc GetAllFruInfo(GetAllFruInfoRequest) returns (GetAllFruInfoResponse) {}
  // Get the FRU information for all FRUs on the system deterministically. This
  // gRPC call will trigger a rescan of all FRUs on the system and return the
  // most updaded FRU information.
  rpc GetFruInfoDeterministicallyOnDemand(GetFruInfoDeterministicallyRequest)
      returns (GetFruInfoDeterministicallyResponse) {}
}
