///|
pub type RobotPayloadRefId = String

///|
pub(all) struct RobotPayloadRef {
  ref_id : RobotPayloadRefId
  role : String
  path : String
  content_type : String
  byte_count : Int64
  checksum : @data_core.DeclaredChecksum
} derive(Debug, Eq, ToJson, FromJson)

///|
pub fn robot_payload_ref(
  ref_id : RobotPayloadRefId,
  role : String,
  path : String,
  content_type : String,
  byte_count : Int64,
  sha256 : String,
) -> RobotPayloadRef {
  robot_payload_ref_with_checksum(
    ref_id,
    role,
    path,
    content_type,
    byte_count,
    @data_core.declared_checksum(@data_core.ChecksumKind::Sha256, sha256),
  )
}

///|
pub fn robot_payload_ref_with_checksum(
  ref_id : RobotPayloadRefId,
  role : String,
  path : String,
  content_type : String,
  byte_count : Int64,
  checksum : @data_core.DeclaredChecksum,
) -> RobotPayloadRef {
  { ref_id, role, path, content_type, byte_count, checksum }
}

///|
pub fn robot_payload_data_ref(payload : RobotPayloadRef) -> @data_core.DataRef {
  @data_core.data_ref(
    payload.ref_id,
    payload.role,
    @data_core.data_uri(payload.path),
    content_type=payload.content_type,
    byte_count=payload.byte_count,
    checksum=payload.checksum,
  )
}