tauri_plugin_nfc/
models.rs1use serde::{Deserialize, Serialize, Serializer};
6use std::fmt::Display;
7
8#[derive(Serialize)]
9#[serde(rename_all = "camelCase")]
10pub struct ScanRequest {
11 pub kind: ScanKind,
12 pub keep_session_alive: bool,
13}
14
15#[derive(Serialize)]
16#[serde(rename_all = "camelCase")]
17pub struct NfcRecord {
18 pub format: NFCTypeNameFormat,
19 pub kind: Vec<u8>,
20 pub id: Vec<u8>,
21 pub payload: Vec<u8>,
22}
23
24#[derive(serde_repr::Deserialize_repr, serde_repr::Serialize_repr)]
25#[repr(u8)]
26pub enum NFCTypeNameFormat {
27 Empty = 0,
28 NfcWellKnown = 1,
29 Media = 2,
30 AbsoluteURI = 3,
31 NfcExternal = 4,
32 Unknown = 5,
33 Unchanged = 6,
34}
35
36#[derive(Deserialize)]
37pub struct NfcTagRecord {
38 pub tnf: NFCTypeNameFormat,
39 pub kind: Vec<u8>,
40 pub id: Vec<u8>,
41 pub payload: Vec<u8>,
42}
43
44#[derive(Deserialize)]
45pub struct NfcTag {
46 pub id: String,
47 pub kind: String,
48 pub records: Vec<NfcTagRecord>,
49}
50
51#[derive(Deserialize)]
52pub struct ScanResponse {
53 pub tag: NfcTag,
54}
55
56#[derive(Debug, Default, Serialize)]
57pub struct UriFilter {
58 scheme: Option<String>,
59 host: Option<String>,
60 path_prefix: Option<String>,
61}
62
63#[derive(Debug)]
64pub enum TechKind {
65 IsoDep,
66 MifareClassic,
67 MifareUltralight,
68 Ndef,
69 NdefFormatable,
70 NfcA,
71 NfcB,
72 NfcBarcode,
73 NfcF,
74 NfcV,
75}
76
77impl Display for TechKind {
78 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79 write!(
80 f,
81 "{}",
82 match self {
83 Self::IsoDep => "IsoDep",
84 Self::MifareClassic => "MifareClassic",
85 Self::MifareUltralight => "MifareUltralight",
86 Self::Ndef => "Ndef",
87 Self::NdefFormatable => "NdefFormatable",
88 Self::NfcA => "NfcA",
89 Self::NfcB => "NfcB",
90 Self::NfcBarcode => "NfcBarcode",
91 Self::NfcF => "NfcF",
92 Self::NfcV => "NfcV",
93 }
94 )
95 }
96}
97
98impl Serialize for TechKind {
99 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
100 where
101 S: Serializer,
102 {
103 serializer.serialize_str(&self.to_string())
104 }
105}
106
107#[derive(Debug, Serialize)]
108#[serde(rename_all = "camelCase")]
109pub enum ScanKind {
110 Ndef {
111 mime_type: Option<String>,
112 uri: Option<UriFilter>,
113 tech_list: Option<Vec<Vec<TechKind>>>,
114 },
115 Tag {
116 mime_type: Option<String>,
117 uri: Option<UriFilter>,
118 },
119}