1use crate::symbol::Symbol;
4use serde::{Deserialize, Serialize};
5use std::borrow::Cow;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct SymbolMetadata {
13 pub name: Cow<'static, str>,
15 pub kind: SymbolKind,
17 #[serde(skip)]
19 pub index: Option<usize>,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub enum SymbolKind {
25 Const,
27 Func {
29 arity: usize,
31 variadic: bool,
33 },
34}
35
36impl From<&Symbol> for SymbolKind {
37 fn from(symbol: &Symbol) -> Self {
38 match symbol {
39 Symbol::Const { .. } => SymbolKind::Const,
40 Symbol::Func { args, variadic, .. } => SymbolKind::Func {
41 arity: *args,
42 variadic: *variadic,
43 },
44 }
45 }
46}
47
48impl From<&Symbol> for SymbolMetadata {
49 fn from(symbol: &Symbol) -> Self {
50 SymbolMetadata {
51 name: symbol.name().to_string().into(),
52 kind: symbol.into(),
53 index: None,
54 }
55 }
56}