1use std::{ffi::OsString, fmt};
2
3use crate::ArgError;
4
5#[cfg(doc)]
6use crate::{core::Core, ArgSplitter};
7
8#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum OwnedItem {
11 Word(OsString),
13 Flag(String),
15}
16
17#[derive(Debug, Clone, PartialEq, Eq)]
19pub enum ItemOs<'a> {
20 Word(OsString),
22 Flag(&'a str),
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum Item<'a> {
29 Word(String),
31 Flag(&'a str),
33}
34
35impl fmt::Display for Item<'_> {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 match self {
38 Item::Flag(flag) => flag.fmt(f),
39 Item::Word(word) => word.fmt(f),
40 }
41 }
42}
43
44impl fmt::Display for ItemOs<'_> {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 match self {
47 ItemOs::Flag(flag) => flag.fmt(f),
48 ItemOs::Word(word) => word.to_string_lossy().fmt(f),
49 }
50 }
51}
52
53impl ItemOs<'_> {
54 pub fn unexpected(&self) -> ArgError {
57 match self {
58 ItemOs::Flag(f) => ArgError::unknown_flag(f),
59 ItemOs::Word(w) => ArgError::unexpected_argument(w),
60 }
61 }
62}
63
64impl Item<'_> {
65 pub fn unexpected(&self) -> ArgError {
68 match self {
69 Item::Flag(f) => ArgError::unknown_flag(f),
70 Item::Word(w) => ArgError::unexpected_argument(w),
71 }
72 }
73}