use schemars::JsonSchema;
use serde::Deserialize;
macro_rules! string_enum {
($(#[$meta:meta])* $name:ident { $($(#[$vmeta:meta])* $variant:ident => $text:literal),+ $(,)? }) => {
$(#[$meta])*
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, JsonSchema)]
pub enum $name {
$($(#[$vmeta])* #[serde(rename = $text)] $variant),+
}
impl $name {
pub fn as_str(self) -> &'static str {
match self { $(Self::$variant => $text),+ }
}
}
};
}
string_enum! {
ScopeLevel {
Project => "project",
WorkspaceAll => "workspace_all",
File => "file",
Dependencies => "dependencies",
}
}
string_enum! {
SearchScopeLevel {
Project => "project",
Dependencies => "dependencies",
}
}
string_enum! {
ReferenceRole {
Call => "call",
TypeAnnotation => "type_annotation",
Import => "import",
Reexport => "reexport",
Read => "read",
Write => "write",
}
}
string_enum! {
CallDirection {
#[serde(alias = "callees", alias = "out")]
Outbound => "outbound",
#[serde(alias = "callers", alias = "in")]
Inbound => "inbound",
}
}
string_enum! {
AdrStatus {
Proposed => "proposed",
Accepted => "accepted",
Deprecated => "deprecated",
Superseded => "superseded",
}
}