use syn::{Generics, Ident};
use super::HttpStatusValue;
use super::field::FieldDefinition;
use super::format_string::validate_no_optional_fields_in_message;
#[derive(Debug, Clone)]
pub(crate) struct StructDefinition {
pub(crate) name: Ident,
pub(crate) generics: Generics,
pub(crate) error_message: String,
pub(crate) diagnostic_code: String,
pub(crate) help_text: Option<String>,
pub(crate) url: Option<String>,
pub(crate) severity: Option<String>,
pub(crate) http_status: Option<HttpStatusValue>,
pub(crate) jsonrpc_code: Option<i32>,
pub(crate) fields: Vec<FieldDefinition>,
}
impl StructDefinition {
pub(crate) fn validate(&self) -> syn::Result<()> {
if self.error_message.is_empty() {
return Err(syn::Error::new_spanned(
&self.name,
"struct must have #[error(\"message\")] attribute",
));
}
validate_no_optional_fields_in_message(&self.error_message, &self.fields)?;
Ok(())
}
}