serde_vrm 0.4.0

Serde types for VRM.
Documentation
use serde::{
    Deserialize,
    Serialize,
};

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct VrmcVrm {
    #[serde(rename = "specVersion")]
    pub spec_version: String,
    pub meta:         Meta,
    pub humanoid:     Humanoid,
    #[serde(rename = "firstPerson")]
    pub first_person: Option<FirstPerson>,
    #[serde(rename = "lookAt")]
    pub look_at:      Option<LookAt>,
    pub expressions:  Option<Expressions>,
}

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct Meta {
    pub name:                               String,
    pub version:                            Option<String>,
    pub authors:                            Vec<String>,
    #[serde(rename = "copyrightInformation")]
    pub copy_right_information:             Option<String>,
    #[serde(rename = "contactInformation")]
    pub contact_information:                Option<String>,
    pub reference:                          Option<Vec<String>>,
    #[serde(rename = "thirdPartyLicenses")]
    pub third_party_licenses:               Option<String>,
    #[serde(rename = "thumbnailImage")]
    pub thumbnail_image:                    Option<u32>,
    #[serde(rename = "licenseUrl")]
    pub license_url:                        String,
    #[serde(rename = "avatarPermission")]
    pub avatar_permission:                  String,
    #[serde(rename = "allowExcessivelyViolentUsage")]
    pub allow_excessively_violent_usage:    Option<bool>,
    #[serde(rename = "allowExcessivelySexualUsage")]
    pub allow_excessively_sexual_usage:     Option<bool>,
    #[serde(rename = "commercialUsage")]
    pub commercial_usage:                   Option<String>,
    #[serde(rename = "allowPoliticalOrReligiousUsage")]
    pub allow_political_or_religious_usage: Option<bool>,
    #[serde(rename = "allowAntisocialOrHateUsage")]
    pub allow_antisocial_or_hate_usage:     Option<bool>,
    #[serde(rename = "creditNotation")]
    pub credit_notation:                    Option<String>,
    #[serde(rename = "allowRedistribution")]
    pub allow_redistribution:               Option<bool>,
    pub modification:                       Option<String>,
    #[serde(rename = "otherLicenseUrl")]
    pub other_license_url:                  Option<String>,
}

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct Humanoid {}

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct FirstPerson {}

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct LookAt {}

#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct Expressions {}