1use std::fmt::Display;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum MarcFormat {
6 Marc21,
8 Unimarc,
10 MarcXml,
12}
13
14impl From<&str> for MarcFormat {
15 fn from(s: &str) -> Self {
16 match s.to_lowercase().as_str() {
17 "marc21" | "marc" => MarcFormat::Marc21,
18 "unimarc" => MarcFormat::Unimarc,
19 "xml" => MarcFormat::MarcXml,
20 _ => MarcFormat::Marc21,
21 }
22 }
23}
24
25impl Display for MarcFormat {
26 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27 match self {
28 MarcFormat::Marc21 => write!(f, "marc21"),
29 MarcFormat::Unimarc => write!(f, "unimarc"),
30 MarcFormat::MarcXml => write!(f, "xml"),
31 }
32 }
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq)]
37pub enum Encoding {
38 Utf8,
40 Marc8,
42 Iso8859_1,
44 Iso8859_2,
46 Iso8859_5,
48 Iso8859_7,
50 Iso8859_15,
52 Iso5426,
54}
55
56impl From<&str> for Encoding {
57 fn from(s: &str) -> Self {
58 match s.to_lowercase().as_str() {
59 "utf8" | "utf-8" => Encoding::Utf8,
60 "marc8" | "marc-8" => Encoding::Marc8,
61 "iso8859-1" | "latin1" | "latin-1" => Encoding::Iso8859_1,
62 "iso8859-2" | "latin2" | "latin-2" => Encoding::Iso8859_2,
63 "iso8859-5" => Encoding::Iso8859_5,
64 "iso8859-7" => Encoding::Iso8859_7,
65 "iso8859-15" | "latin9" | "latin-9" => Encoding::Iso8859_15,
66 "iso5426" | "iso-5426" => Encoding::Iso5426,
67 _ => Encoding::Utf8,
68 }
69 }
70}
71
72impl Display for Encoding {
73 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
74 match self {
75 Encoding::Utf8 => write!(f, "utf8"),
76 Encoding::Marc8 => write!(f, "marc8"),
77 Encoding::Iso8859_1 => write!(f, "iso8859-1"),
78 Encoding::Iso8859_2 => write!(f, "iso8859-2"),
79 Encoding::Iso8859_5 => write!(f, "iso8859-5"),
80 Encoding::Iso8859_7 => write!(f, "iso8859-7"),
81 Encoding::Iso8859_15 => write!(f, "iso8859-15"),
82 Encoding::Iso5426 => write!(f, "iso5426"),
83 }
84 }
85}
86
87#[derive(Debug, Clone, Copy)]
89pub struct FormatEncoding {
90 pub format: MarcFormat,
91 pub encoding: Encoding,
92}
93
94impl FormatEncoding {
95 pub fn new(format: MarcFormat, encoding: Encoding) -> Self {
97 Self { format, encoding }
98 }
99
100 pub fn marc21_default() -> Self {
102 Self {
103 format: MarcFormat::Marc21,
104 encoding: Encoding::Marc8,
105 }
106 }
107
108 pub fn unimarc_default() -> Self {
110 Self {
111 format: MarcFormat::Unimarc,
112 encoding: Encoding::Utf8,
113 }
114 }
115
116 pub fn marc_xml() -> Self {
118 Self {
119 format: MarcFormat::MarcXml,
120 encoding: Encoding::Utf8,
121 }
122 }
123}
124
125