use std::fmt::Debug;
use candid::{CandidType, Nat, Principal};
use ex3_common_error_info::ErrorInfo;
use serde::Deserialize;
type CandidWalletRegisterId = Nat;
type CanisterId = Principal;
pub type ServiceResult<T> = anyhow::Result<T, ErrorInfo>;
#[derive(CandidType, Deserialize, Debug, Clone)]
pub enum EmptyActorResponse {
Ok(()),
Err(ErrorInfo),
}
impl From<ServiceResult<()>> for EmptyActorResponse {
fn from(result: ServiceResult<()>) -> Self {
match result {
Ok(()) => EmptyActorResponse::Ok(()),
Err(err) => EmptyActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType, Deserialize, Debug)]
pub enum BooleanActorResponse {
Ok(bool),
Err(ErrorInfo),
}
impl From<ServiceResult<bool>> for BooleanActorResponse {
fn from(result: ServiceResult<bool>) -> Self {
match result {
Ok(available) => BooleanActorResponse::Ok(available),
Err(err) => BooleanActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType)]
pub enum StringActorResponse {
Ok(String),
Err(ErrorInfo),
}
impl From<ServiceResult<String>> for StringActorResponse {
fn from(result: ServiceResult<String>) -> Self {
match result {
Ok(available) => StringActorResponse::Ok(available),
Err(err) => StringActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType, Deserialize, Debug)]
pub enum CanisterIdActorResponse {
Ok(CanisterId),
Err(ErrorInfo),
}
impl From<ServiceResult<CanisterId>> for CanisterIdActorResponse {
fn from(result: ServiceResult<CanisterId>) -> Self {
match result {
Ok(available) => CanisterIdActorResponse::Ok(available),
Err(err) => CanisterIdActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType, Deserialize, Debug)]
pub enum OptionCanisterIdActorResponse {
Ok(Option<CanisterId>),
Err(ErrorInfo),
}
impl From<ServiceResult<Option<CanisterId>>> for OptionCanisterIdActorResponse {
fn from(result: ServiceResult<Option<CanisterId>>) -> Self {
match result {
Ok(available) => OptionCanisterIdActorResponse::Ok(available),
Err(err) => OptionCanisterIdActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType)]
pub enum WalletRegisterIdActorResponse {
Ok(CandidWalletRegisterId),
Err(ErrorInfo),
}
impl From<ServiceResult<CandidWalletRegisterId>> for WalletRegisterIdActorResponse {
fn from(result: ServiceResult<CandidWalletRegisterId>) -> Self {
match result {
Ok(available) => WalletRegisterIdActorResponse::Ok(available),
Err(err) => WalletRegisterIdActorResponse::Err(err.into()),
}
}
}
#[derive(CandidType)]
pub enum GetStatsResponse<T> {
Ok(T),
Err(ErrorInfo),
}
impl<T> GetStatsResponse<T> {
pub fn new(result: ServiceResult<T>) -> GetStatsResponse<T> {
match result {
Ok(stats) => GetStatsResponse::Ok(stats),
Err(err) => GetStatsResponse::Err(err.into()),
}
}
}