triblespace_core/inline/
encodings.rs1pub mod boolean;
5pub mod ed25519;
7pub mod f256;
9pub mod f64;
11pub mod genid;
13pub mod hash;
15pub mod iu256;
17pub mod linelocation;
19pub mod r256;
21pub mod range;
23pub mod shortstring;
25pub mod time;
27
28use crate::id::ExclusiveId;
29use crate::id::Id;
30use crate::id_hex;
31use crate::macros::entity;
32use crate::metadata;
33use crate::metadata::MetaDescribe;
34use crate::trible::Fragment;
35use crate::inline::Inline;
36use crate::inline::InlineEncoding;
37use std::convert::Infallible;
38
39pub struct UnknownInline {}
46
47impl MetaDescribe for UnknownInline {
48 fn describe() -> Fragment {
49 let id: Id = id_hex!("4EC697E8599AC79D667C722E2C8BEBF4");
50 #[allow(unused_mut)]
51 let mut tribles = entity! {
52 ExclusiveId::force_ref(&id) @ metadata::tag: metadata::KIND_INLINE_ENCODING
53 };
54 #[cfg(feature = "wasm")]
55 {
56 tribles += entity! { ExclusiveId::force_ref(&id) @
57 metadata::value_formatter: wasm_formatter::UNKNOWN_VALUE_WASM,
58 };
59 }
60 tribles
61 }
62}
63
64#[cfg(feature = "wasm")]
65mod wasm_formatter {
66 use core::fmt::Write;
67
68 use triblespace_core_macros::value_formatter;
69
70 #[value_formatter]
71 pub(crate) fn unknown_value(raw: &[u8; 32], out: &mut impl Write) -> Result<(), u32> {
72 out.write_str("unknown:").map_err(|_| 1u32)?;
73 const TABLE: &[u8; 16] = b"0123456789ABCDEF";
74 for &byte in raw {
75 let hi = (byte >> 4) as usize;
76 let lo = (byte & 0x0F) as usize;
77 out.write_char(TABLE[hi] as char).map_err(|_| 1u32)?;
78 out.write_char(TABLE[lo] as char).map_err(|_| 1u32)?;
79 }
80 Ok(())
81 }
82}
83
84impl InlineEncoding for UnknownInline {
85 type ValidationError = Infallible;
86 type Encoding = Self;
87
88 fn validate(value: Inline<Self>) -> Result<Inline<Self>, Self::ValidationError> {
89 Ok(value)
90 }
91}