Skip to main content

apollo_errors/
metadata.rs

1//! Metadata structures for error catalog
2
3use serde::Serialize;
4
5/// Metadata for a field within an error variant
6#[derive(Debug, Clone, Serialize)]
7#[serde(rename_all = "camelCase")]
8pub struct FieldMetadata {
9    /// The field name in Rust (snake_case)
10    pub rust_name: &'static str,
11
12    /// The output name for serialization
13    pub output_name: &'static str,
14
15    /// The Rust type as a string
16    pub ty: &'static str,
17
18    /// Whether this field is an extension field
19    pub is_extension: bool,
20
21    /// HTTP header name if this field should be returned as a header
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub http_header: Option<&'static str>,
24}
25
26/// Metadata for a regular error variant with its own message, code, and status
27#[derive(Debug, Clone, Serialize)]
28#[serde(rename_all = "camelCase")]
29pub struct RegularVariantMetadata {
30    /// The variant name
31    pub name: &'static str,
32
33    /// Error message template
34    pub message: &'static str,
35
36    /// Error code (e.g., "AUTH_FAILED")
37    pub code: &'static str,
38
39    /// HTTP status code
40    pub http_status: u16,
41
42    /// JSON-RPC error code
43    pub jsonrpc_code: i32,
44
45    /// Optional help text
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub help: Option<&'static str>,
48
49    /// Optional documentation URL
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub url: Option<&'static str>,
52
53    /// Optional severity
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub severity: Option<&'static str>,
56
57    /// Fields in this variant
58    pub fields: &'static [FieldMetadata],
59}
60
61/// Metadata for a transparent variant that forwards to another error type
62#[derive(Debug, Clone, Serialize)]
63#[serde(rename_all = "camelCase")]
64pub struct TransparentVariantMetadata {
65    /// The variant name
66    pub name: &'static str,
67
68    /// The type name this variant forwards to
69    pub forward_to: &'static str,
70}
71
72/// Metadata for a single error variant
73#[derive(Debug, Clone, Serialize)]
74#[serde(untagged)]
75pub enum VariantMetadata {
76    /// A regular error variant
77    Regular(RegularVariantMetadata),
78
79    /// A transparent variant that forwards to another error type
80    Transparent(TransparentVariantMetadata),
81}
82
83/// Metadata for an error enum type
84#[derive(Debug, Clone, Serialize)]
85#[serde(rename_all = "camelCase")]
86pub struct ErrorMetadata {
87    /// The Rust type name
88    pub type_name: &'static str,
89
90    /// All variants of this error type
91    pub variants: &'static [VariantMetadata],
92}