use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2ApiTarget {
#[serde(skip_serializing_if = "Option::is_none")]
pub service: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub methods: Vec<String>,
}
impl V2ApiTarget {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
service: Some("test-service".into()),
methods: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2BrowserKeyRestrictions {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub allowed_referrers: Vec<String>,
}
impl V2BrowserKeyRestrictions {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
allowed_referrers: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2ServerKeyRestrictions {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub allowed_ips: Vec<String>,
}
impl V2ServerKeyRestrictions {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
allowed_ips: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2AndroidApplication {
#[serde(skip_serializing_if = "Option::is_none")]
pub sha1_fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub package_name: Option<String>,
}
impl V2AndroidApplication {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
sha1_fingerprint: Some("test-sha1_fingerprint".into()),
package_name: Some("test-package_name".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2AndroidKeyRestrictions {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub allowed_applications: Vec<V2AndroidApplication>,
}
impl V2AndroidKeyRestrictions {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
allowed_applications: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2IosKeyRestrictions {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub allowed_bundle_ids: Vec<String>,
}
impl V2IosKeyRestrictions {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
allowed_bundle_ids: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2Restrictions {
#[serde(skip_serializing_if = "Option::is_none")]
pub browser_key_restrictions: Option<V2BrowserKeyRestrictions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_key_restrictions: Option<V2ServerKeyRestrictions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub android_key_restrictions: Option<V2AndroidKeyRestrictions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ios_key_restrictions: Option<V2IosKeyRestrictions>,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub api_targets: Vec<V2ApiTarget>,
}
impl V2Restrictions {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
browser_key_restrictions: Some(V2BrowserKeyRestrictions::fixture()),
server_key_restrictions: Some(V2ServerKeyRestrictions::fixture()),
android_key_restrictions: Some(V2AndroidKeyRestrictions::fixture()),
ios_key_restrictions: Some(V2IosKeyRestrictions::fixture()),
api_targets: vec![],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2Key {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub uid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(default)]
#[serde(skip_serializing_if = "HashMap::is_empty")]
pub annotations: HashMap<String, String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub restrictions: Option<V2Restrictions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub etag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub service_account_email: Option<String>,
}
impl V2Key {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
name: "test-v2_key".into(),
uid: Some("test-uid".into()),
display_name: Some("test-display_name".into()),
create_time: Some("test-create_time".into()),
update_time: Some("test-update_time".into()),
annotations: Default::default(),
restrictions: Some(V2Restrictions::fixture()),
etag: Some("test-etag".into()),
service_account_email: Some("test-service_account_email".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct V2ListKeysResponse {
#[serde(default)]
pub keys: Vec<V2Key>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_page_token: Option<String>,
}
impl V2ListKeysResponse {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
keys: vec![],
next_page_token: None,
}
}
}