use crate::facet::Facets;
use crate::node::constant::ConstExprNode;
use crate::node::module::ModuleNode;
use crate::node::type_::TypeNode;
use alloc::string::String;
use alloc::vec::Vec;
use zerodds_ast_core::{Id, NodeId, Ref};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AnnotationDefNode {
pub node_id: NodeId,
pub name: String,
pub module: Id<ModuleNode>,
pub members: Vec<Id<AnnotationMemberNode>>,
pub facets: Facets,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AnnotationMemberNode {
pub node_id: NodeId,
pub name: String,
pub type_: Ref<TypeNode>,
pub default: Option<Id<ConstExprNode>>,
pub is_value_member: bool,
pub parent: Id<AnnotationDefNode>,
pub facets: Facets,
}
pub const BUILTIN_ANNOTATIONS: [&str; 40] = [
"id",
"autoid",
"optional",
"position",
"value",
"extensibility",
"final",
"appendable",
"mutable",
"key",
"must_understand",
"default_literal",
"default",
"range",
"min",
"max",
"unit",
"bit_bound",
"external",
"nested",
"verbatim",
"service",
"oneway",
"ami",
"non_serialized",
"try_construct",
"topic",
"hashid",
"data_representation",
"ignore_literal_names",
"default_nested",
"DDSRequestTopic",
"DDSReplyTopic",
"RPCRequestType",
"RPCReplyType",
"Qos",
"Choice",
"Autoid",
"Empty",
"Mutable",
];
pub const BUILTIN_MODULE_NAME: &str = "@builtin";