mod api;
mod wire;
#[cfg(all(test, holos_repository_tests))]
mod tests;
use std::fmt;
use crate::{CircularClassTerm, CircularCoordinate, CohomologyContinuationKind};
const MAGIC: &[u8; 8] = b"HOLOSCC\0";
const VERSION: u16 = 1;
const F64_BITS_CODEC: u8 = 1;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CircularArtifactError {
message: String,
}
impl CircularArtifactError {
fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
pub fn message(&self) -> &str {
&self.message
}
}
impl fmt::Display for CircularArtifactError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "circular artifact: {}", self.message)
}
}
impl std::error::Error for CircularArtifactError {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CircularArtifactSummary {
pub states: usize,
pub coordinates: usize,
pub edges: usize,
pub continuation: bool,
}
#[derive(Debug, Clone)]
struct ArtifactState {
vertex_count: usize,
edges: Vec<(usize, usize)>,
coordinate: Option<CircularCoordinate>,
}
#[derive(Debug, Clone)]
struct ArtifactContinuation {
kind: CohomologyContinuationKind,
target: Vec<CircularClassTerm>,
ambiguity: Vec<Vec<CircularClassTerm>>,
}
#[derive(Debug, Clone)]
pub struct CircularCoordinateArtifact {
modulus: u32,
scale: f64,
tolerance: f64,
states: Vec<ArtifactState>,
continuation: Option<ArtifactContinuation>,
}