From 6b1fb1071781e42402334b1942b290c8376bc0a0 Mon Sep 17 00:00:00 2001 From: Branden J Brown Date: Sun, 13 Oct 2024 09:46:48 -0400 Subject: [PATCH] directive: start of deserialization --- src/directive.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/directive.rs b/src/directive.rs index bb21cc7..b033e5b 100644 --- a/src/directive.rs +++ b/src/directive.rs @@ -49,6 +49,58 @@ pub enum Type { Enum(Vec), } +// Serialized representation of directives. +mod serial { + use serde::Deserialize; + + #[derive(Deserialize)] + #[serde(rename_all = "snake_case", deny_unknown_fields)] + struct Document { + types: Vec, + directives: Vec, + } + + #[derive(Deserialize)] + #[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)] + enum TypeKind { + Text, + Speech, + Character, + Duration, + Asset { + tags: Vec, + }, + Enum { + #[serde(rename = "enum")] + enm: Vec, + }, + } + + #[derive(Deserialize)] + #[serde(rename_all = "snake_case", deny_unknown_fields)] + struct Type { + name: String, + doc: String, + kind: TypeKind, + } + + #[derive(Deserialize)] + #[serde(rename_all = "snake_case", deny_unknown_fields)] + struct Directive { + name: String, + doc: String, + prefix: String, + prefix_param: Option, + infix: Option, + infix_param: Option, + suffix: Option, + suffix_param: Option, + list_param: Option, + } +} + +static DIRECTIVE_PREDECLARED: &str = include_str!("directive-predeclared.json"); + #[cfg(test)] mod tests { use super::*;