use sim_codec::DecodePosition;
use sim_kernel::EncodePosition;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FacePosition {
Eval,
Quote,
Data,
Pattern,
}
impl From<DecodePosition> for FacePosition {
fn from(value: DecodePosition) -> Self {
match value {
DecodePosition::Eval => Self::Eval,
DecodePosition::Quote => Self::Quote,
DecodePosition::Data => Self::Data,
DecodePosition::Pattern => Self::Pattern,
}
}
}
impl From<EncodePosition> for FacePosition {
fn from(value: EncodePosition) -> Self {
match value {
EncodePosition::Eval => Self::Eval,
EncodePosition::Quote => Self::Quote,
EncodePosition::Data => Self::Data,
EncodePosition::Pattern => Self::Pattern,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FaceDimension {
Bytes,
Depth,
Items,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum FaceIssue {
Complete,
Truncated {
dimension: FaceDimension,
limit: usize,
observed: usize,
},
Unsupported {
reason: String,
},
CodecFailure {
message: String,
},
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FaceMetadata {
pub(super) codec: Option<String>,
pub(super) position: FacePosition,
pub(super) issue: FaceIssue,
}
impl FaceMetadata {
#[must_use]
pub fn codec(&self) -> Option<&str> {
self.codec.as_deref()
}
#[must_use]
pub const fn position(&self) -> FacePosition {
self.position
}
#[must_use]
pub const fn issue(&self) -> &FaceIssue {
&self.issue
}
#[must_use]
pub const fn is_complete(&self) -> bool {
matches!(self.issue, FaceIssue::Complete)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum FaceContent {
Text(String),
Bytes(Vec<u8>),
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct EncodedFace {
pub(super) content: Option<FaceContent>,
pub(super) metadata: FaceMetadata,
}
impl EncodedFace {
#[must_use]
pub const fn content(&self) -> Option<&FaceContent> {
self.content.as_ref()
}
#[must_use]
pub const fn metadata(&self) -> &FaceMetadata {
&self.metadata
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SourceEditOutcome {
pub(super) metadata: FaceMetadata,
}
impl SourceEditOutcome {
#[must_use]
pub const fn applied(&self) -> bool {
self.metadata.is_complete()
}
#[must_use]
pub const fn metadata(&self) -> &FaceMetadata {
&self.metadata
}
}