diff options
Diffstat (limited to 'common/src/lib.rs')
| -rw-r--r-- | common/src/lib.rs | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/common/src/lib.rs b/common/src/lib.rs index 9ab0b91..1359c73 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -4,26 +4,39 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ #![feature(array_try_map)] -pub mod api; pub mod routes; -pub mod user; -use jellyobject::{Object, Tag, TypedTag}; +use jellyobject::{Object, Registry, Tag, TagInfo, TypedTag}; pub use jellystream_types as stream; -use std::marker::PhantomData; +use std::{any::TypeId, marker::PhantomData, sync::LazyLock}; + +pub use jellyobject; + +pub static TAGREG: LazyLock<Registry> = LazyLock::new(|| { + let mut reg = Registry::default(); + register_fields(&mut reg); + register_enums(&mut reg); + reg +}); macro_rules! fields { ($($id:ident: $type:ty = $tag:literal $name:literal;)*) => { $(pub const $id: TypedTag<$type> = TypedTag(Tag($tag), PhantomData);)* + fn register_fields(reg: &mut Registry) { + $(reg.add(Tag($tag), TagInfo { name: $name, r#type: Some(TypeId::of::<$type>()) });)* + } }; } macro_rules! enums { ($($id:ident = $tag:literal $name:literal;)*) => { $(pub const $id: Tag = Tag($tag);)* + fn register_enums(reg: &mut Registry) { + $(reg.add(Tag($tag), TagInfo { name: $name, r#type: None });)* + } }; } fields! { - // Tag counter: 32 + // Tag counter: 36 NO_KIND: Tag = 1 "kind"; NO_TITLE: &str = 2 "title"; @@ -44,8 +57,8 @@ fields! { NO_CREDIT: Object = 33 "credit"; // multi CR_NODE: u64 = 34 "node"; - CR_KIND: Tag = 34 "kind"; - CR_JOB: &str = 34 "node"; + CR_KIND: Tag = 35 "kind"; + CR_ROLE: &str = 36 "role"; // multi TR_KIND: Tag = 16 "kind"; TR_SOURCE: &str = 17 "source"; |