use crate::bounded::NonEmpty;
use crate::identity::{self, Identity, OwnerIdentity, Profile};
use crate::kind::{Kind, Role};
use crate::origin::OriginTrail;
use crate::plan::{MEMBERSHIP_LIMIT, Plan};
use crate::token::{
CAPTURED_TOKEN_LIMIT, GeneratedTree, TEXT_SOURCE_BYTE_LIMIT, TOKEN_PATH_DEPTH_LIMIT,
};
#[path = "type_guard.rs"]
mod guard;
const CAPTURED_TOKENS_PER_PATH_LEVEL: usize = CAPTURED_TOKEN_LIMIT
.checked_div(TOKEN_PATH_DEPTH_LIMIT)
.expect("the nonzero token-path depth divides the captured-token magnitude");
pub const RENDERED_BYTE_LIMIT: usize = TEXT_SOURCE_BYTE_LIMIT * CAPTURED_TOKENS_PER_PATH_LEVEL;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RenderedUnit<R: Role> {
role: R,
identity: Identity<identity::RenderedUnit>,
semantic_key: Identity<identity::GeneratedUnit>,
profile: Profile,
origin: OriginTrail,
address: Option<OwnerIdentity>,
tree: GeneratedTree,
digest: Identity<identity::OutputBytes>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RenderedProjection<R: Role> {
units: NonEmpty<RenderedUnit<R>, MEMBERSHIP_LIMIT>,
}
pub struct Output<'plan, K: Kind> {
plan: &'plan Plan<K>,
units: Vec<RenderedUnit<K::Role>>,
}
#[must_use = "a rendering refusal names the seat or the magnitude the renderer would have passed"]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum RenderError {
NothingRendered,
SeatUnplanned {
role: &'static str,
},
BytesUnbounded {
role: &'static str,
bound: usize,
observed: usize,
},
UnitsUnbounded {
bound: usize,
observed: usize,
},
TokensUnbounded {
bound: usize,
observed: usize,
},
}