use serde::{Deserialize, Serialize};
use validator::Validate;
use crate::v2_1::datatypes::{CertificateHashDataType, CustomDataType, StatusInfoType};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum CertificateSigningUseEnumType {
ChargingStationCertificate,
V2GCertificate,
V2G20Certificate,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum GenericStatusEnumType {
Accepted,
Rejected,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct SignCertificateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
#[validate(length(max = 5500))]
pub csr: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub certificate_type: Option<CertificateSigningUseEnumType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hash_root_certificate: Option<CertificateHashDataType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_id: Option<i32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct SignCertificateResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
pub status: GenericStatusEnumType,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_info: Option<StatusInfoType>,
}