use std::convert::TryFrom;
use crate::data::event::DamlCreatedEvent;
use crate::data::offset::DamlLedgerOffset;
use crate::data::reassignment::{DamlAssignedEvent, DamlUnassignedEvent};
use crate::data::topology::DamlParticipantPermission;
use crate::data::{DamlError, DamlResult};
use crate::grpc_protobuf::com::daml::ledger::api::v2::get_active_contracts_response::ContractEntry;
use crate::grpc_protobuf::com::daml::ledger::api::v2::get_connected_synchronizers_response::ConnectedSynchronizer;
use crate::grpc_protobuf::com::daml::ledger::api::v2::{
ActiveContract, GetActiveContractsResponse, IncompleteAssigned, IncompleteUnassigned, ParticipantPermission,
};
use crate::util::Required;
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlActiveContract {
pub created_event: DamlCreatedEvent,
pub synchronizer_id: String,
pub reassignment_counter: u64,
}
impl TryFrom<ActiveContract> for DamlActiveContract {
type Error = DamlError;
fn try_from(c: ActiveContract) -> DamlResult<Self> {
Ok(Self {
created_event: DamlCreatedEvent::try_from(c.created_event.req()?)?,
synchronizer_id: c.synchronizer_id,
reassignment_counter: c.reassignment_counter,
})
}
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlIncompleteUnassigned {
pub created_event: DamlCreatedEvent,
pub unassigned_event: DamlUnassignedEvent,
}
impl TryFrom<IncompleteUnassigned> for DamlIncompleteUnassigned {
type Error = DamlError;
fn try_from(u: IncompleteUnassigned) -> DamlResult<Self> {
Ok(Self {
created_event: DamlCreatedEvent::try_from(u.created_event.req()?)?,
unassigned_event: DamlUnassignedEvent::try_from(u.unassigned_event.req()?)?,
})
}
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlIncompleteAssigned {
pub assigned_event: DamlAssignedEvent,
}
impl TryFrom<IncompleteAssigned> for DamlIncompleteAssigned {
type Error = DamlError;
fn try_from(a: IncompleteAssigned) -> DamlResult<Self> {
Ok(Self {
assigned_event: DamlAssignedEvent::try_from(a.assigned_event.req()?)?,
})
}
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum DamlContractEntry {
Active(DamlActiveContract),
IncompleteUnassigned(Box<DamlIncompleteUnassigned>),
IncompleteAssigned(Box<DamlIncompleteAssigned>),
}
impl TryFrom<ContractEntry> for DamlContractEntry {
type Error = DamlError;
fn try_from(e: ContractEntry) -> DamlResult<Self> {
Ok(match e {
ContractEntry::ActiveContract(c) => Self::Active(DamlActiveContract::try_from(c)?),
ContractEntry::IncompleteUnassigned(u) => {
Self::IncompleteUnassigned(Box::new(DamlIncompleteUnassigned::try_from(u)?))
},
ContractEntry::IncompleteAssigned(a) => {
Self::IncompleteAssigned(Box::new(DamlIncompleteAssigned::try_from(a)?))
},
})
}
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlActiveContractsResponse {
pub workflow_id: String,
pub contract_entry: DamlContractEntry,
pub stream_continuation_token: Vec<u8>,
}
impl TryFrom<GetActiveContractsResponse> for DamlActiveContractsResponse {
type Error = DamlError;
fn try_from(r: GetActiveContractsResponse) -> DamlResult<Self> {
Ok(Self {
workflow_id: r.workflow_id,
contract_entry: DamlContractEntry::try_from(r.contract_entry.req()?)?,
stream_continuation_token: r.stream_continuation_token,
})
}
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlActiveContractsPage {
pub active_contracts: Vec<DamlActiveContractsResponse>,
pub active_at_offset: DamlLedgerOffset,
pub next_page_token: Option<Vec<u8>>,
}
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct DamlConnectedSynchronizer {
pub synchronizer_alias: String,
pub synchronizer_id: String,
pub permission: Option<DamlParticipantPermission>,
}
impl TryFrom<ConnectedSynchronizer> for DamlConnectedSynchronizer {
type Error = DamlError;
fn try_from(c: ConnectedSynchronizer) -> DamlResult<Self> {
let permission = match ParticipantPermission::try_from(c.permission).ok().req()? {
ParticipantPermission::Unspecified => None,
other => Some(DamlParticipantPermission::from(other)),
};
Ok(Self {
synchronizer_alias: c.synchronizer_alias,
synchronizer_id: c.synchronizer_id,
permission,
})
}
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
pub struct DamlLatestPrunedOffsets {
pub participant_pruned_up_to_inclusive: DamlLedgerOffset,
pub all_divulged_contracts_pruned_up_to_inclusive: DamlLedgerOffset,
}