1#[cfg(not(feature = "std"))]
4use alloc::borrow::Cow;
5#[cfg(feature = "std")]
6use std::borrow::Cow;
7
8use crate::Sensitivity;
9
10#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct FieldInfo<'a> {
13 name: Option<Cow<'a, str>>,
14 index: usize,
15 type_name: Option<Cow<'a, str>>,
16 sensitivity: Sensitivity,
17}
18
19impl<'a> FieldInfo<'a> {
20 pub fn named(name: impl Into<Cow<'a, str>>, index: usize) -> Self {
22 Self { name: Some(name.into()), index, type_name: None, sensitivity: Sensitivity::Normal }
23 }
24
25 pub fn tuple(index: usize) -> Self {
27 Self { name: None, index, type_name: None, sensitivity: Sensitivity::Normal }
28 }
29
30 pub fn with_type_name(mut self, type_name: impl Into<Cow<'a, str>>) -> Self {
32 self.type_name = Some(type_name.into());
33 self
34 }
35
36 pub fn with_sensitivity(mut self, sensitivity: Sensitivity) -> Self {
38 self.sensitivity = sensitivity;
39 self
40 }
41
42 pub fn name(&self) -> Option<&str> {
44 self.name.as_deref()
45 }
46
47 pub fn index(&self) -> usize {
49 self.index
50 }
51
52 pub fn type_name(&self) -> Option<&str> {
54 self.type_name.as_deref()
55 }
56
57 pub fn sensitivity(&self) -> Sensitivity {
59 self.sensitivity
60 }
61}