// @generated by jacquard-lexicon. DO NOT EDIT.
//
// Lexicon: uk.ewancroft.site.info
//
// This file was automatically generated from Lexicon schemas.
// Any manual changes will be overwritten on the next regeneration.

///Information about the website.
#[jacquard_derive::lexicon]
#[derive(
    serde::Serialize,
    serde::Deserialize,
    Debug,
    Clone,
    PartialEq,
    Eq,
    jacquard_derive::IntoStatic
)]
#[serde(rename_all = "camelCase")]
pub struct Info<'a> {
    ///Additional flexible information about the website.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub additional_info: std::option::Option<InfoRecordAdditionalInfo<'a>>,
    ///Credits for assets, fonts, libraries, or other resources used.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub credits: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>,
    ///Information about the open-source nature of the website.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub open_source_info: std::option::Option<InfoRecordOpenSourceInfo<'a>>,
    ///A statement about website privacy and data handling.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub privacy_statement: std::option::Option<jacquard_common::CowStr<'a>>,
    ///A list of technologies used to build the website.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub technology_stack: std::option::Option<
        Vec<jacquard_common::types::value::Data<'a>>,
    >,
}

///Additional flexible information about the website.
#[jacquard_derive::lexicon]
#[derive(
    serde::Serialize,
    serde::Deserialize,
    Debug,
    Clone,
    PartialEq,
    Eq,
    jacquard_derive::IntoStatic
)]
#[serde(rename_all = "camelCase")]
pub struct InfoRecordAdditionalInfo<'a> {
    ///Website purpose or mission statement.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub purpose: std::option::Option<jacquard_common::CowStr<'a>>,
    ///License information for specific content sections, such as a blog.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub section_license: std::option::Option<
        Vec<jacquard_common::types::value::Data<'a>>,
    >,
    ///The year the website was first launched or created.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    pub website_birth_year: std::option::Option<i64>,
}

///Information about the open-source nature of the website.
#[jacquard_derive::lexicon]
#[derive(
    serde::Serialize,
    serde::Deserialize,
    Debug,
    Clone,
    PartialEq,
    Eq,
    jacquard_derive::IntoStatic
)]
#[serde(rename_all = "camelCase")]
pub struct InfoRecordOpenSourceInfo<'a> {
    ///Projects or libraries this is based on or forked from.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub based_on: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>,
    ///General description of the open-source nature.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub description: std::option::Option<jacquard_common::CowStr<'a>>,
    ///License information for the project.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub license: std::option::Option<InfoRecordOpenSourceInfoRecordLicense<'a>>,
    ///Related services or platforms.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub related_services: std::option::Option<
        Vec<jacquard_common::types::value::Data<'a>>,
    >,
    ///Source code repositories.
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub repositories: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>,
}

///License information for the project.
#[jacquard_derive::lexicon]
#[derive(
    serde::Serialize,
    serde::Deserialize,
    Debug,
    Clone,
    PartialEq,
    Eq,
    jacquard_derive::IntoStatic
)]
#[serde(rename_all = "camelCase")]
pub struct InfoRecordOpenSourceInfoRecordLicense<'a> {
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub name: std::option::Option<jacquard_common::CowStr<'a>>,
    #[serde(skip_serializing_if = "std::option::Option::is_none")]
    #[serde(borrow)]
    pub url: std::option::Option<jacquard_common::types::string::Uri<'a>>,
}

impl jacquard_common::types::collection::Collection for Info<'_> {
    const NSID: &'static str = "uk.ewancroft.site.info";
}