use alloc::string::String;
use alloc::vec::Vec;
use serde::{Deserialize, Serialize};
use super::span::EmptySpan;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AttributeReference {
#[serde(skip)]
pub span: EmptySpan,
pub source: AttributeSource,
#[serde(skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
pub attribute: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub path: Vec<AttributePathSegment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum AttributeSource {
Request,
Resource,
Principal,
Environment,
Context,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum AttributePathSegment {
Key(String),
Index(usize),
}