use crate::model::application_payload::ApplicationPayloadError as Payload;
mod payload;
mod request;
pub use payload::{
ApplicationIngressPayload, MAX_APPLICATION_INGRESS_ARGUMENT_BYTES,
MAX_APPLICATION_INGRESS_METHOD_BYTES, MAX_APPLICATION_INGRESS_REPLY_BYTES,
};
pub use request::{ApplicationMutationRequest, ApplicationObservationRequest};
use crate::model::{ic_observation::IcObservationRequestError, operation_plan::OperationPlanError};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ApplicationIngressError {
#[error("invalid application ingress principal")]
InvalidPrincipal,
#[error("application ingress cannot target the management canister")]
ManagementPrincipal,
#[error("invalid application ingress method")]
InvalidMethod,
#[error("application ingress arguments too large")]
ArgumentsTooLarge,
#[error("invalid application ingress reply limit")]
InvalidReplyLimit,
#[error("application ingress authority mismatch")]
AuthorityMismatch,
#[error("application ingress target mismatch")]
TargetMismatch,
#[error("application ingress payload mismatch")]
PayloadMismatch,
#[error("application ingress requires a pending mutation")]
NoPendingMutation,
#[error("application ingress mutation mismatch")]
MutationMismatch,
#[error("application ingress observation is pending")]
ObservationPending,
#[error(transparent)]
Observation(#[from] IcObservationRequestError),
#[error(transparent)]
Plan(#[from] OperationPlanError),
}
#[cfg(test)]
mod tests;
impl From<crate::model::application_payload::ApplicationPayloadError> for ApplicationIngressError {
fn from(error: crate::model::application_payload::ApplicationPayloadError) -> Self {
match error {
Payload::ArgumentsTooLarge => Self::ArgumentsTooLarge,
Payload::InvalidMethod => Self::InvalidMethod,
Payload::InvalidPrincipal => Self::InvalidPrincipal,
Payload::ManagementPrincipal => Self::ManagementPrincipal,
}
}
}