use std::fmt::Display;
use crate::{
request::EventRequest, response::TimeRange, signature::BridgeSignature,
};
use borsh::{BorshDeserialize, BorshSerialize};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[cfg(feature = "typescript")]
use ts_rs::TS;
#[cfg(feature = "openapi")]
use utoipa::{IntoParams, ToSchema};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct SubjectQuery {
pub active: Option<bool>,
pub schema_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct GovQuery {
pub active: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct ApprovalQuery {
pub state: Option<ApprovalState>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct EventsQuery {
pub quantity: Option<u64>,
pub page: Option<u64>,
pub reverse: Option<bool>,
#[cfg_attr(feature = "openapi", param(style = DeepObject, explode))]
pub event_request_ts: Option<TimeRange>,
#[cfg_attr(feature = "openapi", param(style = DeepObject, explode))]
pub event_ledger_ts: Option<TimeRange>,
#[cfg_attr(feature = "openapi", param(style = DeepObject, explode))]
pub sink_ts: Option<TimeRange>,
pub event_type: Option<EventRequestType>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct AbortsQuery {
pub request_id: Option<String>,
pub sn: Option<u64>,
pub quantity: Option<u64>,
pub page: Option<u64>,
pub reverse: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema, IntoParams))]
#[cfg_attr(feature = "openapi", into_params(parameter_in = Query))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct FirstEndEvents {
pub quantity: Option<u64>,
pub reverse: Option<bool>,
pub event_type: Option<EventRequestType>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
#[serde(rename_all = "snake_case")]
pub enum EventRequestType {
Create,
Fact,
Transfer,
Confirm,
Reject,
Eol,
}
impl From<&EventRequest> for EventRequestType {
fn from(value: &EventRequest) -> Self {
match value {
EventRequest::Create(..) => Self::Create,
EventRequest::Fact(..) => Self::Fact,
EventRequest::Transfer(..) => Self::Transfer,
EventRequest::Confirm(..) => Self::Confirm,
EventRequest::EOL(..) => Self::Eol,
EventRequest::Reject(..) => Self::Reject,
}
}
}
impl Display for EventRequestType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Create => write!(f, "create"),
Self::Fact => write!(f, "fact"),
Self::Transfer => write!(f, "transfer"),
Self::Confirm => write!(f, "confirm"),
Self::Reject => write!(f, "reject"),
Self::Eol => write!(f, "eol"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
#[serde(rename_all = "snake_case")]
pub enum ApprovalStateRes {
Accepted,
Rejected,
Obsolete,
}
impl Display for ApprovalStateRes {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let string = match self {
Self::Accepted => "accepted".to_owned(),
Self::Rejected => "rejected".to_owned(),
Self::Obsolete => "obsolete".to_owned(),
};
write!(f, "{}", string,)
}
}
#[derive(
Default,
Debug,
Clone,
Serialize,
Deserialize,
PartialEq,
Eq,
BorshDeserialize,
BorshSerialize,
)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
#[serde(rename_all = "snake_case")]
pub enum ApprovalState {
#[default]
Pending,
Accepted,
Rejected,
Obsolete,
}
impl Display for ApprovalState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let string = match self {
Self::Accepted => "accepted".to_owned(),
Self::Rejected => "rejected".to_owned(),
Self::Obsolete => "obsolete".to_owned(),
Self::Pending => "pending".to_owned(),
};
write!(f, "{}", string,)
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeSignedEventRequest {
pub request: BridgeEventRequest,
pub signature: Option<BridgeSignature>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
#[serde(tag = "event", content = "data", rename_all = "snake_case")]
pub enum BridgeEventRequest {
Create(BridgeCreateRequest),
Fact(BridgeFactRequest),
Transfer(BridgeTransferRequest),
Eol(BridgeEOLRequest),
Confirm(BridgeConfirmRequest),
Reject(BridgeRejectRequest),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeRejectRequest {
pub subject_id: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeCreateRequest {
pub name: Option<String>,
pub description: Option<String>,
pub governance_id: Option<String>,
pub schema_id: String,
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeFactRequest {
pub subject_id: String,
pub payload: Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeTransferRequest {
pub subject_id: String,
pub new_owner: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeEOLRequest {
pub subject_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[cfg_attr(feature = "typescript", derive(TS))]
#[cfg_attr(feature = "typescript", ts(export))]
pub struct BridgeConfirmRequest {
pub subject_id: String,
pub name_old_owner: Option<String>,
}