use crate::{link, wire::send};
mod proof;
pub(crate) use proof::Proof;
pub trait Policy: Proof + 'static {
#[doc(hidden)]
const ON_SUBMIT: bool;
#[doc(hidden)]
fn completed_plain(sent: send::Sent) -> Option<link::Consumed>;
}
pub enum OnSubmit {}
pub enum OnComplete {}
impl Proof for OnSubmit {}
impl Proof for OnComplete {}
impl Policy for OnSubmit {
const ON_SUBMIT: bool = true;
fn completed_plain(_: send::Sent) -> Option<link::Consumed> {
None
}
}
impl Policy for OnComplete {
const ON_SUBMIT: bool = false;
fn completed_plain(sent: send::Sent) -> Option<link::Consumed> {
Some(link::Consumed::proven(sent.get()))
}
}