mod impls;
mod se_de;
use crate::GenerationIdx;
use crate::JValue;
use crate::RawValue;
use crate::TracePos;
use air_interpreter_cid::CID;
use polyplets::SecurityTetraplet;
use se_de::par_serializer;
use serde::Deserialize;
use serde::Serialize;
use std::fmt::Formatter;
use std::rc::Rc;
#[derive(
Debug,
Default,
Clone,
Copy,
PartialEq,
Eq,
::rkyv::Archive,
::rkyv::Serialize,
::rkyv::Deserialize,
)]
#[archive(check_bytes)]
pub struct ParResult {
pub left_size: u32,
pub right_size: u32,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
::rkyv::Archive,
::rkyv::Serialize,
::rkyv::Deserialize,
)]
#[archive(check_bytes)]
pub enum Sender {
PeerId(Rc<String>),
PeerIdWithCallId { peer_id: Rc<String>, call_id: u32 },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub enum CallResult {
#[serde(rename = "sent_by")]
RequestSentBy(Sender),
Executed(ValueRef),
Failed(CID<ServiceResultCidAggregate>),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub enum ValueRef {
Scalar(CID<ServiceResultCidAggregate>),
Stream {
cid: CID<ServiceResultCidAggregate>,
generation: GenerationIdx,
},
Unused(CID<JValue>),
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
::rkyv::Archive,
::rkyv::Serialize,
::rkyv::Deserialize,
)]
#[archive(check_bytes)]
pub struct CallServiceFailed {
pub ret_code: i32,
pub message: Rc<String>,
}
impl CallServiceFailed {
pub fn new(ret_code: i32, message: Rc<String>) -> Self {
Self { ret_code, message }
}
pub fn to_value(&self) -> JValue {
serde_json::to_value(self)
.expect("serde_json serializer shouldn't fail")
.into()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct ServiceResultCidAggregate {
pub value_cid: CID<RawValue>,
pub argument_hash: Rc<str>,
pub tetraplet_cid: CID<SecurityTetraplet>,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct FoldSubTraceLore {
#[serde(rename = "pos")]
pub value_pos: TracePos,
#[serde(rename = "desc")]
pub subtraces_desc: Vec<SubTraceDesc>,
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct SubTraceDesc {
#[serde(rename = "pos")]
pub begin_pos: TracePos,
#[serde(rename = "len")]
pub subtrace_len: u32,
}
pub type FoldLore = Vec<FoldSubTraceLore>;
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct FoldResult {
pub lore: FoldLore,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct ApResult {
#[serde(rename = "gens")]
pub res_generations: Vec<GenerationIdx>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub enum CanonResult {
#[serde(rename = "sent_by")]
RequestSentBy(Rc<String>),
Executed(CID<CanonResultCidAggregate>),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub struct CanonResultCidAggregate {
pub tetraplet: CID<SecurityTetraplet>,
pub values: Vec<CID<CanonCidAggregate>>,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
::rkyv::Archive,
::rkyv::Serialize,
::rkyv::Deserialize,
)]
#[archive(check_bytes)]
pub struct CanonCidAggregate {
pub value: CID<RawValue>,
pub tetraplet: CID<SecurityTetraplet>,
pub provenance: Provenance,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub enum Provenance {
Literal,
ServiceResult {
cid: CID<ServiceResultCidAggregate>,
},
Canon {
cid: CID<CanonResultCidAggregate>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)]
#[archive(check_bytes)]
pub enum ExecutedState {
#[serde(with = "par_serializer")]
Par(ParResult),
Call(CallResult),
Fold(FoldResult),
Ap(ApResult),
Canon(CanonResult),
}