// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT use serde::{Deserialize, Serialize, Serializer}; use std::fmt::Display; #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct ScanRequest { pub kind: ScanKind, pub keep_session_alive: bool, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct NfcRecord { pub format: NFCTypeNameFormat, pub kind: Vec, pub id: Vec, pub payload: Vec, } #[derive(serde_repr::Deserialize_repr, serde_repr::Serialize_repr)] #[repr(u8)] pub enum NFCTypeNameFormat { Empty = 0, NfcWellKnown = 1, Media = 2, AbsoluteURI = 3, NfcExternal = 4, Unknown = 5, Unchanged = 6, } #[derive(Deserialize)] pub struct NfcTagRecord { pub tnf: NFCTypeNameFormat, pub kind: Vec, pub id: Vec, pub payload: Vec, } #[derive(Deserialize)] pub struct NfcTag { pub id: String, pub kind: String, pub records: Vec, } #[derive(Deserialize)] pub struct ScanResponse { pub tag: NfcTag, } #[derive(Debug, Default, Serialize)] pub struct UriFilter { scheme: Option, host: Option, path_prefix: Option, } #[derive(Debug)] pub enum TechKind { IsoDep, MifareClassic, MifareUltralight, Ndef, NdefFormatable, NfcA, NfcB, NfcBarcode, NfcF, NfcV, } impl Display for TechKind { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { Self::IsoDep => "IsoDep", Self::MifareClassic => "MifareClassic", Self::MifareUltralight => "MifareUltralight", Self::Ndef => "Ndef", Self::NdefFormatable => "NdefFormatable", Self::NfcA => "NfcA", Self::NfcB => "NfcB", Self::NfcBarcode => "NfcBarcode", Self::NfcF => "NfcF", Self::NfcV => "NfcV", } ) } } impl Serialize for TechKind { fn serialize(&self, serializer: S) -> Result where S: Serializer, { serializer.serialize_str(&self.to_string()) } } #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub enum ScanKind { Ndef { mime_type: Option, uri: Option, tech_list: Option>>, }, Tag { mime_type: Option, uri: Option, }, }