File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -5,42 +5,15 @@ use crate::persistent_list_map::ToPersistentListMapIter;
55use crate :: persistent_vector:: PersistentVectorIter ;
66use crate :: persistent_vector:: ToPersistentVector ;
77use crate :: persistent_vector:: ToPersistentVectorIter ;
8+ use crate :: define_protocol;
89use crate :: protocol:: Protocol ;
910use crate :: value:: ToValue ;
1011use crate :: value:: Value ;
1112use std:: rc:: Rc ;
13+ // @TODO move to protocols::iterable
14+
15+ define_protocol ! ( Iterable , PersistentList , PersistentListMap , PersistentVector ) ;
1216
13- //
14- // This Protocol lives inside of Clojure RS
15- //
16- #[ derive( Debug , Clone ) ]
17- pub struct Iterable {
18- value : Rc < Value > ,
19- }
20- impl Protocol for Iterable {
21- fn try_as_protocol ( val : & Rc < Value > ) -> Option < Self > {
22- match & * * val {
23- Value :: PersistentList ( _) => Some ( Iterable {
24- value : Rc :: clone ( val) ,
25- } ) ,
26- Value :: PersistentVector ( _) => Some ( Iterable {
27- value : Rc :: clone ( val) ,
28- } ) ,
29- Value :: PersistentListMap ( _) => Some ( Iterable {
30- value : Rc :: clone ( val) ,
31- } ) ,
32- _ => None ,
33- }
34- }
35- fn try_unwrap ( & self ) -> Option < Rc < Value > > {
36- match & * self . value {
37- Value :: PersistentList ( _) => Some ( Rc :: clone ( & self . value ) ) ,
38- Value :: PersistentVector ( _) => Some ( Rc :: clone ( & self . value ) ) ,
39- Value :: PersistentListMap ( _) => Some ( Rc :: clone ( & self . value ) ) ,
40- _ => None ,
41- }
42- }
43- }
4417pub enum IterableIter {
4518 PersistentList ( PersistentListIter ) ,
4619 PersistentVector ( PersistentVectorIter ) ,
You can’t perform that action at this time.
0 commit comments