use serde::{Serialize, Deserialize};
use serde_json::Value as JsonValue;
use std::borrow::Cow;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreditCard<'a> {
number: Cow<'a, str>,
name: Cow<'a, str>,
#[serde(rename = "expiryMonth")]
expiry_month: Cow<'a, str>,
#[serde(rename = "expiryYear")]
expiry_year: Cow<'a, str>,
cvc: Cow<'a, str>,
}
impl<'a> CreditCard<'a> {
pub fn builder(number: impl Into<Cow<'a, str>>, name: impl Into<Cow<'a, str>>, expiry_month: impl Into<Cow<'a, str>>, expiry_year: impl Into<Cow<'a, str>>, cvc: impl Into<Cow<'a, str>>) -> CreditCardBuilder<'a> {
CreditCardBuilder {
number: number.into(),
name: name.into(),
expiry_month: expiry_month.into(),
expiry_year: expiry_year.into(),
cvc: cvc.into(),
}
}
pub fn number(&self) -> &str { self.number.as_ref() }
pub fn name(&self) -> &str { self.name.as_ref() }
pub fn expiry_month(&self) -> &str { self.expiry_month.as_ref() }
pub fn expiry_year(&self) -> &str { self.expiry_year.as_ref() }
pub fn cvc(&self) -> &str { self.cvc.as_ref() }
}
pub struct CreditCardBuilder<'a> {
number: Cow<'a, str>,
name: Cow<'a, str>,
expiry_month: Cow<'a, str>,
expiry_year: Cow<'a, str>,
cvc: Cow<'a, str>,
}
impl<'a> CreditCardBuilder<'a> {
pub fn build(self) -> CreditCard<'a> {
CreditCard {
number: self.number,
name: self.name,
expiry_month: self.expiry_month,
expiry_year: self.expiry_year,
cvc: self.cvc,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddressField<'a> {
name: Cow<'a, str>,
value: Cow<'a, str>,
}
impl<'a> AddressField<'a> {
pub fn builder(name: impl Into<Cow<'a, str>>, value: impl Into<Cow<'a, str>>) -> AddressFieldBuilder<'a> {
AddressFieldBuilder {
name: name.into(),
value: value.into(),
}
}
pub fn name(&self) -> &str { self.name.as_ref() }
pub fn value(&self) -> &str { self.value.as_ref() }
}
pub struct AddressFieldBuilder<'a> {
name: Cow<'a, str>,
value: Cow<'a, str>,
}
impl<'a> AddressFieldBuilder<'a> {
pub fn build(self) -> AddressField<'a> {
AddressField {
name: self.name,
value: self.value,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddressFields<'a> {
fields: Vec<AddressField<'a>>,
}
impl<'a> AddressFields<'a> {
pub fn builder(fields: Vec<AddressField<'a>>) -> AddressFieldsBuilder<'a> {
AddressFieldsBuilder {
fields: fields,
}
}
pub fn fields(&self) -> &[AddressField<'a>] { &self.fields }
}
pub struct AddressFieldsBuilder<'a> {
fields: Vec<AddressField<'a>>,
}
impl<'a> AddressFieldsBuilder<'a> {
pub fn build(self) -> AddressFields<'a> {
AddressFields {
fields: self.fields,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct Address<'a> {
fields: Vec<AddressField<'a>>,
}
impl<'a> Address<'a> {
pub fn builder(fields: Vec<AddressField<'a>>) -> AddressBuilder<'a> {
AddressBuilder {
fields: fields,
}
}
pub fn fields(&self) -> &[AddressField<'a>] { &self.fields }
}
pub struct AddressBuilder<'a> {
fields: Vec<AddressField<'a>>,
}
impl<'a> AddressBuilder<'a> {
pub fn build(self) -> Address<'a> {
Address {
fields: self.fields,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddressUI<'a> {
#[serde(rename = "addressFields")]
address_fields: Vec<AddressFields<'a>>,
}
impl<'a> AddressUI<'a> {
pub fn builder(address_fields: Vec<AddressFields<'a>>) -> AddressUIBuilder<'a> {
AddressUIBuilder {
address_fields: address_fields,
}
}
pub fn address_fields(&self) -> &[AddressFields<'a>] { &self.address_fields }
}
pub struct AddressUIBuilder<'a> {
address_fields: Vec<AddressFields<'a>>,
}
impl<'a> AddressUIBuilder<'a> {
pub fn build(self) -> AddressUI<'a> {
AddressUI {
address_fields: self.address_fields,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum FillingStrategy {
#[default]
#[serde(rename = "autocompleteAttribute")]
AutocompleteAttribute,
#[serde(rename = "autofillInferred")]
AutofillInferred,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct FilledField<'a> {
#[serde(rename = "htmlType")]
html_type: Cow<'a, str>,
id: Cow<'a, str>,
name: Cow<'a, str>,
value: Cow<'a, str>,
#[serde(rename = "autofillType")]
autofill_type: Cow<'a, str>,
#[serde(rename = "fillingStrategy")]
filling_strategy: FillingStrategy,
#[serde(rename = "frameId")]
frame_id: crate::page::FrameId<'a>,
#[serde(rename = "fieldId")]
field_id: crate::dom::BackendNodeId,
}
impl<'a> FilledField<'a> {
pub fn builder(html_type: impl Into<Cow<'a, str>>, id: impl Into<Cow<'a, str>>, name: impl Into<Cow<'a, str>>, value: impl Into<Cow<'a, str>>, autofill_type: impl Into<Cow<'a, str>>, filling_strategy: impl Into<FillingStrategy>, frame_id: crate::page::FrameId<'a>, field_id: crate::dom::BackendNodeId) -> FilledFieldBuilder<'a> {
FilledFieldBuilder {
html_type: html_type.into(),
id: id.into(),
name: name.into(),
value: value.into(),
autofill_type: autofill_type.into(),
filling_strategy: filling_strategy.into(),
frame_id: frame_id,
field_id: field_id,
}
}
pub fn html_type(&self) -> &str { self.html_type.as_ref() }
pub fn id(&self) -> &str { self.id.as_ref() }
pub fn name(&self) -> &str { self.name.as_ref() }
pub fn value(&self) -> &str { self.value.as_ref() }
pub fn autofill_type(&self) -> &str { self.autofill_type.as_ref() }
pub fn filling_strategy(&self) -> &FillingStrategy { &self.filling_strategy }
pub fn frame_id(&self) -> &crate::page::FrameId<'a> { &self.frame_id }
pub fn field_id(&self) -> &crate::dom::BackendNodeId { &self.field_id }
}
pub struct FilledFieldBuilder<'a> {
html_type: Cow<'a, str>,
id: Cow<'a, str>,
name: Cow<'a, str>,
value: Cow<'a, str>,
autofill_type: Cow<'a, str>,
filling_strategy: FillingStrategy,
frame_id: crate::page::FrameId<'a>,
field_id: crate::dom::BackendNodeId,
}
impl<'a> FilledFieldBuilder<'a> {
pub fn build(self) -> FilledField<'a> {
FilledField {
html_type: self.html_type,
id: self.id,
name: self.name,
value: self.value,
autofill_type: self.autofill_type,
filling_strategy: self.filling_strategy,
frame_id: self.frame_id,
field_id: self.field_id,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct TriggerParams<'a> {
#[serde(rename = "fieldId")]
field_id: crate::dom::BackendNodeId,
#[serde(skip_serializing_if = "Option::is_none", rename = "frameId")]
frame_id: Option<crate::page::FrameId<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
card: Option<CreditCard<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
address: Option<Address<'a>>,
}
impl<'a> TriggerParams<'a> {
pub fn builder(field_id: crate::dom::BackendNodeId) -> TriggerParamsBuilder<'a> {
TriggerParamsBuilder {
field_id: field_id,
frame_id: None,
card: None,
address: None,
}
}
pub fn field_id(&self) -> &crate::dom::BackendNodeId { &self.field_id }
pub fn frame_id(&self) -> Option<&crate::page::FrameId<'a>> { self.frame_id.as_ref() }
pub fn card(&self) -> Option<&CreditCard<'a>> { self.card.as_ref() }
pub fn address(&self) -> Option<&Address<'a>> { self.address.as_ref() }
}
pub struct TriggerParamsBuilder<'a> {
field_id: crate::dom::BackendNodeId,
frame_id: Option<crate::page::FrameId<'a>>,
card: Option<CreditCard<'a>>,
address: Option<Address<'a>>,
}
impl<'a> TriggerParamsBuilder<'a> {
pub fn frame_id(mut self, frame_id: crate::page::FrameId<'a>) -> Self { self.frame_id = Some(frame_id); self }
pub fn card(mut self, card: CreditCard<'a>) -> Self { self.card = Some(card); self }
pub fn address(mut self, address: Address<'a>) -> Self { self.address = Some(address); self }
pub fn build(self) -> TriggerParams<'a> {
TriggerParams {
field_id: self.field_id,
frame_id: self.frame_id,
card: self.card,
address: self.address,
}
}
}
impl<'a> TriggerParams<'a> { pub const METHOD: &'static str = "Autofill.trigger"; }
impl<'a> crate::CdpCommand<'a> for TriggerParams<'a> {
const METHOD: &'static str = "Autofill.trigger";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetAddressesParams<'a> {
addresses: Vec<Address<'a>>,
}
impl<'a> SetAddressesParams<'a> {
pub fn builder(addresses: Vec<Address<'a>>) -> SetAddressesParamsBuilder<'a> {
SetAddressesParamsBuilder {
addresses: addresses,
}
}
pub fn addresses(&self) -> &[Address<'a>] { &self.addresses }
}
pub struct SetAddressesParamsBuilder<'a> {
addresses: Vec<Address<'a>>,
}
impl<'a> SetAddressesParamsBuilder<'a> {
pub fn build(self) -> SetAddressesParams<'a> {
SetAddressesParams {
addresses: self.addresses,
}
}
}
impl<'a> SetAddressesParams<'a> { pub const METHOD: &'static str = "Autofill.setAddresses"; }
impl<'a> crate::CdpCommand<'a> for SetAddressesParams<'a> {
const METHOD: &'static str = "Autofill.setAddresses";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DisableParams {}
impl DisableParams { pub const METHOD: &'static str = "Autofill.disable"; }
impl<'a> crate::CdpCommand<'a> for DisableParams {
const METHOD: &'static str = "Autofill.disable";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct EnableParams {}
impl EnableParams { pub const METHOD: &'static str = "Autofill.enable"; }
impl<'a> crate::CdpCommand<'a> for EnableParams {
const METHOD: &'static str = "Autofill.enable";
type Response = crate::EmptyReturns;
}