rust_macios/contacts/
cn_labeled_value.rs1use std::marker::{PhantomData, Sized};
2
3use objc::{msg_send, sel, sel_impl};
4
5use crate::{
6 foundation::NSString,
7 object,
8 objective_c_runtime::traits::{FromId, PNSObject},
9};
10
11object! {
12 unsafe pub struct CNLabeledValue<ValueType> {
14 marker: PhantomData<ValueType>,
15 }
16}
17
18pub trait ICNLabeledValue<ValueType>: PNSObject
20where
21 ValueType: PNSObject + FromId,
22{
23 fn m_init_with_label_value(&mut self, label: &NSString, value: ValueType) -> Self
25 where
26 Self: Sized + FromId,
27 {
28 unsafe {
29 Self::from_id(msg_send![
30 self.m_self(),
31 initWithLabel:label.m_self()
32 value:value
33 ])
34 }
35 }
36
37 fn m_labeled_value_with_label_value(label: &NSString, value: ValueType) -> Self
39 where
40 Self: Sized + FromId,
41 {
42 unsafe {
43 Self::from_id(
44 msg_send![Self::m_class(), labeledValueWithLabel:label.m_self() value:value],
45 )
46 }
47 }
48
49 fn p_label(&self) -> NSString {
54 unsafe { NSString::from_id(msg_send![self.m_self(), label]) }
55 }
56
57 fn p_value(&self) -> ValueType {
59 unsafe { ValueType::from_id(msg_send![self.m_self(), value]) }
60 }
61
62 fn m_labeled_value_by_setting_label(&self, label: &NSString) -> Self
67 where
68 Self: Sized + FromId,
69 {
70 unsafe {
71 Self::from_id(msg_send![self.m_self(), labeledValueBySettingLabel: label.m_self()])
72 }
73 }
74
75 fn m_labeled_value_by_setting_label_value(&self, label: &NSString, value: ValueType) -> Self
77 where
78 Self: Sized + FromId,
79 {
80 unsafe {
81 Self::from_id(msg_send![
82 self.m_self(),
83 labeledValueBySettingLabel:label.m_self()
84 value:value
85 ])
86 }
87 }
88
89 fn m_labeled_value_by_setting_value(&self, value: ValueType) -> Self
91 where
92 Self: Sized + FromId,
93 {
94 unsafe { Self::from_id(msg_send![self.m_self(), valueBySettingValue: value]) }
95 }
96
97 fn m_localized_string_for_label(label: &NSString) -> NSString {
102 unsafe {
103 NSString::from_id(msg_send![Self::m_class(), localizedStringForLabel: label.m_self()])
104 }
105 }
106
107 fn p_identifier(&self) -> NSString {
109 unsafe { NSString::from_id(msg_send![self.m_self(), identifier]) }
110 }
111}
112
113impl<ValueType> ICNLabeledValue<ValueType> for CNLabeledValue<ValueType> where
114 ValueType: PNSObject + FromId
115{
116}
117
118impl<ValueType> CNLabeledValue<ValueType>
119where
120 ValueType: PNSObject + FromId,
121{
122 pub fn init_with_label_value(&mut self, label: &NSString, value: ValueType) -> Self {
124 self.m_init_with_label_value(label, value)
125 }
126
127 pub fn labeled_value_with_label_value(label: &NSString, value: ValueType) -> Self {
129 Self::m_labeled_value_with_label_value(label, value)
130 }
131
132 pub fn label(&self) -> NSString {
137 self.p_label()
138 }
139
140 pub fn value(&self) -> ValueType {
142 self.p_value()
143 }
144
145 pub fn labeled_value_by_setting_label(&self, label: &NSString) -> Self {
150 self.m_labeled_value_by_setting_label(label)
151 }
152
153 pub fn labeled_value_by_setting_label_value(&self, label: &NSString, value: ValueType) -> Self {
155 self.m_labeled_value_by_setting_label_value(label, value)
156 }
157
158 pub fn labeled_value_by_setting_value(&self, value: ValueType) -> Self {
160 self.m_labeled_value_by_setting_value(value)
161 }
162
163 pub fn localized_string_for_label(label: &NSString) -> NSString {
168 Self::m_localized_string_for_label(label)
169 }
170
171 pub fn identifier(&self) -> NSString {
173 self.p_identifier()
174 }
175}
176
177extern "C" {
178 pub static CNLabelHome: NSString;
183
184 pub static CNLabelWork: NSString;
186
187 pub static CNLabelSchool: NSString;
189
190 pub static CNLabelOther: NSString;
192
193 pub static CNLabelEmailiCloud: NSString;
195
196 pub static CNLabelURLAddressHomePage: NSString;
198
199 pub static CNLabelDateAnniversary: NSString;
201}