use serde_derive::{Deserialize, Serialize};
use crate::ids::TerminalReaderId;
use crate::params::{Expandable, Metadata, Object};
use crate::resources::TerminalLocation;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct TerminalReader {
pub id: TerminalReaderId,
#[serde(default)]
pub deleted: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_sw_version: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_type: Option<Box<TerminalReaderDeviceType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip_address: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub livemode: Option<Box<bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Box<Expandable<TerminalLocation>>>,
#[serde(default)]
pub metadata: Metadata,
#[serde(skip_serializing_if = "Option::is_none")]
pub serial_number: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<Box<String>>,
}
impl Object for TerminalReader {
type Id = TerminalReaderId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"terminal.reader"
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TerminalReaderDeviceType {
BbposChipper2x,
BbposWiseposE,
#[serde(rename = "verifone_P400")]
VerifoneP400,
}
impl TerminalReaderDeviceType {
pub fn as_str(self) -> &'static str {
match self {
TerminalReaderDeviceType::BbposChipper2x => "bbpos_chipper2x",
TerminalReaderDeviceType::BbposWiseposE => "bbpos_wisepos_e",
TerminalReaderDeviceType::VerifoneP400 => "verifone_P400",
}
}
}
impl AsRef<str> for TerminalReaderDeviceType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TerminalReaderDeviceType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}