mod impls;
mod traits;
use super::*;
use serde::Serialize;
use std::rc::Rc;
#[allow(clippy::large_enum_variant)] #[derive(Serialize, Debug, PartialEq)]
pub enum Instruction<'i> {
Call(Box<Call<'i>>),
Ap(Box<Ap<'i>>),
ApMap(Box<ApMap<'i>>),
Canon(Box<Canon<'i>>),
CanonMap(Box<CanonMap<'i>>),
CanonStreamMapScalar(Box<CanonStreamMapScalar<'i>>),
Seq(Box<Seq<'i>>),
Par(Box<Par<'i>>),
Xor(Box<Xor<'i>>),
Match(Box<Match<'i>>),
MisMatch(Box<MisMatch<'i>>),
Fail(Box<Fail<'i>>),
FoldScalar(Box<FoldScalar<'i>>),
FoldStream(Box<FoldStream<'i>>),
FoldStreamMap(Box<FoldStreamMap<'i>>),
Never(Never),
New(Box<New<'i>>),
Next(Box<Next<'i>>),
Null(Null),
Error,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct Call<'i> {
pub triplet: Triplet<'i>,
pub args: Rc<Vec<ImmutableValue<'i>>>,
pub output: CallOutputValue<'i>,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct Ap<'i> {
pub argument: ApArgument<'i>,
pub result: ApResult<'i>,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct ApMap<'i> {
pub key: StreamMapKeyClause<'i>,
pub value: ApArgument<'i>,
pub map: StreamMap<'i>,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct Canon<'i> {
pub peer_id: ResolvableToPeerIdVariable<'i>,
pub stream: Stream<'i>,
pub canon_stream: CanonStream<'i>,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct CanonMap<'i> {
pub peer_id: ResolvableToPeerIdVariable<'i>,
pub stream_map: StreamMap<'i>,
pub canon_stream_map: CanonStreamMap<'i>,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct CanonStreamMapScalar<'i> {
pub peer_id: ResolvableToPeerIdVariable<'i>,
pub stream_map: StreamMap<'i>,
pub scalar: Scalar<'i>,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct Seq<'i>(pub Instruction<'i>, pub Instruction<'i>);
#[derive(Serialize, Debug, PartialEq)]
pub struct Par<'i>(pub Instruction<'i>, pub Instruction<'i>);
#[derive(Serialize, Debug, PartialEq)]
pub struct Xor<'i>(pub Instruction<'i>, pub Instruction<'i>);
#[derive(Serialize, Debug, PartialEq)]
pub struct Match<'i> {
pub left_value: ImmutableValue<'i>,
pub right_value: ImmutableValue<'i>,
pub instruction: Instruction<'i>,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct MisMatch<'i> {
pub left_value: ImmutableValue<'i>,
pub right_value: ImmutableValue<'i>,
pub instruction: Instruction<'i>,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub enum Fail<'i> {
Scalar(Scalar<'i>),
ScalarWithLambda(ScalarWithLambda<'i>),
Literal {
ret_code: i64,
error_message: &'i str,
},
CanonStreamWithLambda(CanonStreamWithLambda<'i>),
LastError,
Error,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct FoldScalar<'i> {
#[serde(borrow)]
pub iterable: FoldScalarIterable<'i>,
#[serde(borrow)]
pub iterator: Scalar<'i>,
pub instruction: Rc<Instruction<'i>>,
pub last_instruction: Option<Rc<Instruction<'i>>>,
pub span: Span,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct FoldStream<'i> {
pub iterable: Stream<'i>,
#[serde(borrow)]
pub iterator: Scalar<'i>,
pub instruction: Rc<Instruction<'i>>,
pub last_instruction: Option<Rc<Instruction<'i>>>,
pub span: Span,
}
#[derive(Serialize, Debug, PartialEq)]
pub struct FoldStreamMap<'i> {
pub iterable: StreamMap<'i>,
#[serde(borrow)]
pub iterator: Scalar<'i>,
pub instruction: Rc<Instruction<'i>>,
pub last_instruction: Option<Rc<Instruction<'i>>>,
pub span: Span,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct Next<'i> {
pub iterator: Scalar<'i>,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct Never;
#[derive(Serialize, Debug, PartialEq)]
pub struct New<'i> {
pub argument: NewArgument<'i>,
pub instruction: Instruction<'i>,
pub span: Span,
}
#[derive(Serialize, Debug, PartialEq, Eq)]
pub struct Null;
pub trait PeerIDErrorLogable {
fn log_errors_with_peer_id(&self) -> bool;
}