use ave_identity::{DigestIdentifier, PublicKey};
use borsh::{BorshDeserialize, BorshSerialize};
use serde::{Deserialize, Serialize};
use crate::{Namespace, SchemaType, ValueWrapper};
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub enum EventRequest {
Create(CreateRequest),
Fact(FactRequest),
Transfer(TransferRequest),
Confirm(ConfirmRequest),
Reject(RejectRequest),
EOL(EOLRequest),
}
impl EventRequest {
pub fn check_request_signature(
&self,
signer: &PublicKey,
owner: &PublicKey,
new_owner: &Option<PublicKey>,
) -> bool {
match self {
Self::Create(..) | Self::Transfer(..) | Self::EOL(..) => {
signer == owner
}
Self::Confirm(..) | Self::Reject(..) => {
new_owner.as_ref() == Some(signer)
}
Self::Fact(..) => true,
}
}
pub const fn is_create_event(&self) -> bool {
matches!(self, Self::Create(_create_request))
}
pub const fn is_fact_event(&self) -> bool {
matches!(self, Self::Fact(_fact_request))
}
pub fn get_subject_id(&self) -> DigestIdentifier {
match self {
Self::Create(_create_request) => DigestIdentifier::default(),
Self::Fact(fact_request) => fact_request.subject_id.clone(),
Self::Transfer(transfer_request) => {
transfer_request.subject_id.clone()
}
Self::Confirm(confirm_request) => {
confirm_request.subject_id.clone()
}
Self::Reject(reject_request) => reject_request.subject_id.clone(),
Self::EOL(eolrequest) => eolrequest.subject_id.clone(),
}
}
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct CreateRequest {
pub name: Option<String>,
pub description: Option<String>,
pub governance_id: DigestIdentifier,
pub schema_id: SchemaType,
pub namespace: Namespace,
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct FactRequest {
pub subject_id: DigestIdentifier,
pub payload: ValueWrapper,
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct TransferRequest {
pub subject_id: DigestIdentifier,
pub new_owner: PublicKey,
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct ConfirmRequest {
pub subject_id: DigestIdentifier,
pub name_old_owner: Option<String>,
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct EOLRequest {
pub subject_id: DigestIdentifier,
}
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Eq,
PartialEq,
BorshSerialize,
BorshDeserialize,
)]
pub struct RejectRequest {
pub subject_id: DigestIdentifier,
}