hara_native/lang/
protocol.rs1#[path = "protocol/declarations.rs"]
2pub(crate) mod declarations;
3#[path = "protocol/iabort.rs"]
4pub mod iabort;
5#[path = "protocol/iapplicable.rs"]
6pub mod iapplicable;
7#[path = "protocol/iassoc.rs"]
8pub mod iassoc;
9#[path = "protocol/icas.rs"]
10pub mod icas;
11#[path = "protocol/iclose.rs"]
12pub mod iclose;
13#[path = "protocol/iclosed.rs"]
14pub mod iclosed;
15#[path = "protocol/icoll.rs"]
16pub mod icoll;
17#[path = "protocol/icomponent.rs"]
18pub mod icomponent;
19#[path = "protocol/iconj.rs"]
20pub mod iconj;
21#[path = "protocol/icons.rs"]
22pub mod icons;
23#[path = "protocol/icontext.rs"]
24pub mod icontext;
25#[path = "protocol/icontexteval.rs"]
26pub mod icontexteval;
27#[path = "protocol/icontextlifecycle.rs"]
28pub mod icontextlifecycle;
29#[path = "protocol/icoroutine.rs"]
30pub mod icoroutine;
31#[path = "protocol/icount.rs"]
32pub mod icount;
33#[path = "protocol/ideps.rs"]
34pub mod ideps;
35#[path = "protocol/ideref.rs"]
36pub mod ideref;
37#[path = "protocol/idereftimeout.rs"]
38pub mod idereftimeout;
39#[path = "protocol/idisplay.rs"]
40pub mod idisplay;
41#[path = "protocol/idissoc.rs"]
42pub mod idissoc;
43#[path = "protocol/iempty.rs"]
44pub mod iempty;
45#[path = "protocol/iencodable.rs"]
46pub mod iencodable;
47#[path = "protocol/iencode.rs"]
48pub mod iencode;
49#[path = "protocol/iencodevisitor.rs"]
50pub mod iencodevisitor;
51#[path = "protocol/iequality.rs"]
52pub mod iequality;
53#[path = "protocol/iexinfo.rs"]
54pub mod iexinfo;
55#[path = "protocol/ifind.rs"]
56pub mod ifind;
57#[path = "protocol/iflush.rs"]
58pub mod iflush;
59#[path = "protocol/ifn.rs"]
60pub mod ifn;
61#[path = "protocol/ihash.rs"]
62pub mod ihash;
63#[path = "protocol/ihashcached.rs"]
64pub mod ihashcached;
65#[path = "protocol/iindexed.rs"]
66pub mod iindexed;
67#[path = "protocol/iindexedkv.rs"]
68pub mod iindexedkv;
69#[path = "protocol/imaptype.rs"]
70pub mod imaptype;
71#[path = "protocol/iiter.rs"]
72pub mod iiter;
73#[path = "protocol/iiterator.rs"]
74pub mod iiterator;
75#[path = "protocol/ilineartype.rs"]
76pub mod ilineartype;
77#[path = "protocol/isequential.rs"]
78pub mod isequential;
79#[path = "protocol/ilookup.rs"]
80pub mod ilookup;
81#[path = "protocol/imatch.rs"]
82pub mod imatch;
83#[path = "protocol/imetadata.rs"]
84pub mod imetadata;
85#[path = "protocol/imutable.rs"]
86pub mod imutable;
87#[path = "protocol/inamespaced.rs"]
88pub mod inamespaced;
89#[path = "protocol/inth.rs"]
90pub mod inth;
91#[path = "protocol/iobjtype.rs"]
92pub mod iobjtype;
93#[path = "protocol/iofn.rs"]
94pub mod iofn;
95#[path = "protocol/ipair.rs"]
96pub mod ipair;
97#[path = "protocol/ipeekfirst.rs"]
98pub mod ipeekfirst;
99#[path = "protocol/ipeeklast.rs"]
100pub mod ipeeklast;
101#[path = "protocol/ipersistent.rs"]
102pub mod ipersistent;
103#[path = "protocol/ipointer.rs"]
104pub mod ipointer;
105#[path = "protocol/ipopfirst.rs"]
106pub mod ipopfirst;
107#[path = "protocol/ipoplast.rs"]
108pub mod ipoplast;
109#[path = "protocol/ipromise.rs"]
110pub mod ipromise;
111#[path = "protocol/ipushfirst.rs"]
112pub mod ipushfirst;
113#[path = "protocol/ipushlast.rs"]
114pub mod ipushlast;
115#[path = "protocol/irealize.rs"]
116pub mod irealize;
117#[path = "protocol/ireduce.rs"]
118pub mod ireduce;
119#[path = "protocol/ireset.rs"]
120pub mod ireset;
121#[path = "protocol/ispace.rs"]
122pub mod ispace;
123#[path = "protocol/istream.rs"]
124pub mod istream;
125#[path = "protocol/istreamduplex.rs"]
126pub mod istreamduplex;
127#[path = "protocol/istreamoffer.rs"]
128pub mod istreamoffer;
129#[path = "protocol/istreampoll.rs"]
130pub mod istreampoll;
131#[path = "protocol/istreamwrite.rs"]
132pub mod istreamwrite;
133#[path = "protocol/istringlike.rs"]
134pub mod istringlike;
135#[path = "protocol/isettype.rs"]
136pub mod isettype;
137#[path = "protocol/itomutable.rs"]
138pub mod itomutable;
139#[path = "protocol/itopersistent.rs"]
140pub mod itopersistent;
141#[path = "protocol/iwatch.rs"]
142pub mod iwatch;
143#[path = "protocol/iwork.rs"]
144pub mod iwork;
145#[path = "protocol/iworkexecutor.rs"]
146pub mod iworkexecutor;
147#[path = "protocol/iworkhost.rs"]
148pub mod iworkhost;
149#[path = "protocol/iworkref.rs"]
150pub mod iworkref;
151#[path = "protocol/iworkrun.rs"]
152pub mod iworkrun;
153#[path = "protocol/iworkstore.rs"]
154pub mod iworkstore;
155
156pub use declarations::{
157 find_protocol, protocol_declarations, ProtocolArity, ProtocolAvailability, ProtocolDeclaration,
158 ProtocolMethodDeclaration,
159};
160pub use iabort::IAbort;
161pub use iapplicable::IApplicable;
162pub use iassoc::IAssoc;
163pub use icas::ICas;
164pub use iclose::IClose;
165pub use iclosed::IClosed;
166pub use icoll::IColl;
167pub use icomponent::IComponent;
168pub use iconj::IConj;
169pub use icons::ICons;
170pub use icontext::IContext;
171pub use icontexteval::IContextEval;
172pub use icontextlifecycle::IContextLifeCycle;
173pub use icoroutine::ICoroutine;
174pub use icount::ICount;
175pub use ideps::IDeps;
176pub use ideref::IDeref;
177pub use idereftimeout::IDerefTimeout;
178pub use idisplay::IDisplay;
179pub use idissoc::IDissoc;
180pub use iempty::IEmpty;
181pub use iencodable::IEncodable;
182pub use iencode::IEncode;
183pub use iencodevisitor::IEncodeVisitor;
184pub use iequality::IEquality;
185pub use iexinfo::IExInfo;
186pub use ifind::IFind;
187pub use iflush::IFlush;
188pub use ifn::IFn;
189pub use ihash::{HashType, IHash};
190pub use ihashcached::IHashCached;
191pub use iindexed::IIndexed;
192pub use iindexedkv::IIndexedKV;
193pub use imaptype::IMapType;
194pub use iiter::IIter;
195pub use iiterator::IIterator;
196pub use ilineartype::ILinearType;
197pub use isequential::ISequential;
198pub use ilookup::ILookup;
199pub use imatch::IMatch;
200pub use imetadata::{IMetadata, MetaType};
201pub use imutable::IMutable;
202pub use inamespaced::INamespaced;
203pub use inth::INth;
204pub use iobjtype::{IObjType, ObjType};
205pub use iofn::IOFn;
206pub use ipair::IPair;
207pub use ipeekfirst::IPeekFirst;
208pub use ipeeklast::IPeekLast;
209pub use ipersistent::IPersistent;
210pub use ipointer::IPointer;
211pub use ipopfirst::IPopFirst;
212pub use ipoplast::IPopLast;
213pub use ipromise::IPromise;
214pub use ipushfirst::IPushFirst;
215pub use ipushlast::IPushLast;
216pub use irealize::IRealize;
217pub use ireduce::IReduce;
218pub use ireset::IReset;
219pub use isettype::ISetType;
220pub use ispace::ISpace;
221pub use istream::IStream;
222pub use istreamduplex::IStreamDuplex;
223pub use istreamoffer::IStreamOffer;
224pub use istreampoll::IStreamPoll;
225pub use istreamwrite::IStreamWrite;
226pub use istringlike::IStringLike;
227pub use itomutable::IToMutable;
228pub use itopersistent::IToPersistent;
229pub use iwatch::IWatch;
230pub use iwork::IWork;
231pub use iworkexecutor::IWorkExecutor;
232pub use iworkhost::IWorkHost;
233pub use iworkref::IWorkRef;
234pub use iworkrun::IWorkRun;
235pub use iworkstore::IWorkStore;
236
237#[cfg(test)]
238mod tests {
239 use super::{IFind, IObjType, ObjType};
240 use crate::lang::data::{Cons, List, Queue, Seq, Tuple, Vector};
241
242 struct Entries(Vec<(u8, Option<u8>)>);
243
244 impl IFind<u8> for Entries {
245 type Output = (u8, Option<u8>);
246
247 fn find(&self, key: &u8) -> Option<Self::Output> {
248 self.0
249 .iter()
250 .find(|(candidate, _)| candidate == key)
251 .cloned()
252 }
253 }
254
255 #[test]
256 fn sequential_family_uses_java_protocol_category() {
257 assert_eq!(List::<i32>::new().obj_type(), ObjType::Sequential);
258 assert_eq!(Vector::<i32>::new().obj_type(), ObjType::Sequential);
259 assert_eq!(Tuple::<i32>::Tup0.obj_type(), ObjType::Sequential);
260 assert_eq!(Queue::<i32>::new().obj_type(), ObjType::Sequential);
261 assert_eq!(Cons::new(1, List::new()).obj_type(), ObjType::Sequential);
262 assert_eq!(Seq::new([1].into_iter()).obj_type(), ObjType::Sequential);
263 }
264
265 #[test]
266 fn find_has_distinguishes_absence_from_a_nil_value() {
267 let entries = Entries(vec![(1, None), (2, Some(7))]);
268 assert_eq!(entries.find(&1), Some((1, None)));
269 assert!(entries.has(&1));
270 assert!(entries.has(&2));
271 assert!(!entries.has(&3));
272 }
273}