1#[cfg(feature = "scrape")]
2pub mod scrape;
3
4use std::collections::BTreeMap;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Serialize, Deserialize)]
9pub struct TokenInfo {
10 pub keywords: Vec<String>,
11 pub attributes: BTreeMap<String, Attribute>,
12 pub builtin_values: BTreeMap<String, BuiltinValue>,
13 pub interpolation_type_names: Vec<String>,
14 pub interpolation_sampling_names: Vec<String>,
15 pub primitive_types: Vec<String>,
16 pub type_generators: Vec<String>,
17 pub type_aliases: BTreeMap<String, String>,
18}
19
20#[derive(Debug, Serialize, Deserialize)]
21pub struct Attribute {
22 pub description: String,
23 pub description_parameters: Option<String>,
24}
25
26#[derive(Debug, Serialize, Deserialize)]
27pub struct BuiltinValue {
28 pub stages: BTreeMap<String, BuiltinValueStage>,
29 pub typ: String,
30}
31
32#[derive(Debug, Serialize, Deserialize)]
33pub struct BuiltinValueStage {
34 pub description: String,
35 pub direction: BuiltinValueDirection,
36}
37
38#[derive(Debug, Serialize, Deserialize)]
39pub enum BuiltinValueDirection {
40 Input,
41 Output,
42}
43
44#[derive(Debug, Serialize, Deserialize)]
45#[serde(transparent)]
46pub struct FunctionInfo {
47 pub functions: BTreeMap<String, Function>,
48}
49
50#[derive(Debug, Serialize, Deserialize)]
51pub struct Function {
52 pub overloads: Vec<FunctionOverload>,
53 pub parameters: Vec<FunctionParameter>,
54 pub description: Option<String>,
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58pub struct FunctionParameter {
59 pub name: String,
60 pub description: String,
61}
62
63#[derive(Debug, Serialize, Deserialize)]
64pub struct FunctionOverload {
65 pub signature: String,
66 pub parameterization: Parameterization,
67 pub description: Option<String>,
68}
69
70#[derive(Debug, Default, Serialize, Deserialize)]
72#[serde(transparent)]
73pub struct Parameterization {
74 pub typevars: BTreeMap<String, ParameterizationKind>,
75}
76
77#[derive(Debug, Serialize, Deserialize)]
78#[serde(rename_all = "snake_case")]
79pub enum ParameterizationKind {
80 Types(Vec<String>),
82 Description(String),
84}
85
86#[cfg(feature = "include")]
87pub mod include {
88 pub const TOKENS_JSON: &str = include_str!("../spec/tokens.json");
89 pub const FUNCTIONS_JSON: &str = include_str!("../spec/functions.json");
90
91 pub fn tokens() -> serde_json::Result<crate::TokenInfo> {
92 serde_json::from_slice(TOKENS_JSON.as_bytes())
93 }
94
95 pub fn functions() -> serde_json::Result<crate::FunctionInfo> {
96 serde_json::from_slice(FUNCTIONS_JSON.as_bytes())
97 }
98}