diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/context.rs | 18 | ||||
| -rw-r--r-- | src/lib.rs | 21 |
2 files changed, 20 insertions, 19 deletions
diff --git a/src/context.rs b/src/context.rs index 0b51677..6f8e04f 100644 --- a/src/context.rs +++ b/src/context.rs | |||
| @@ -21,6 +21,24 @@ pub trait MappedList<'a> { | |||
| 21 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>>; | 21 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>>; |
| 22 | fn for_each(&'a self, func: &dyn Fn(&MappedValue<'a>, &mut String) -> CrimResult<()>) -> CrimResult<String>; | 22 | fn for_each(&'a self, func: &dyn Fn(&MappedValue<'a>, &mut String) -> CrimResult<()>) -> CrimResult<String>; |
| 23 | } | 23 | } |
| 24 | |||
| 25 | impl<'a, T: MappedStructure<'a>> MappedList<'a> for Vec<T> { | ||
| 26 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>> { | ||
| 27 | if let Some(x) = self.get(id) { | ||
| 28 | Some(MappedValue::<'a>::Struct(x)) | ||
| 29 | } else { | ||
| 30 | None | ||
| 31 | } | ||
| 32 | } | ||
| 33 | |||
| 34 | fn for_each(&'a self, func: &dyn Fn(&MappedValue<'a>, &mut String) -> CrimResult<()>) -> CrimResult<String> { | ||
| 35 | let mut buf = String::new(); | ||
| 36 | for i in self { | ||
| 37 | func( &MappedValue::Struct(i), &mut buf )?; | ||
| 38 | } | ||
| 39 | Ok(buf) | ||
| 40 | } | ||
| 41 | } | ||
| 24 | 42 | ||
| 25 | impl<'a> MappedList<'a> for Vec<Value> { | 43 | impl<'a> MappedList<'a> for Vec<Value> { |
| 26 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>> { | 44 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>> { |
| @@ -522,24 +522,6 @@ Now with explicit outputs: | |||
| 522 | } | 522 | } |
| 523 | } | 523 | } |
| 524 | 524 | ||
| 525 | impl<'a> MappedList<'a> for Vec<Item> { | ||
| 526 | fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>> { | ||
| 527 | if let Some(x) = self.get(id) { | ||
| 528 | Some(MappedValue::<'a>::Struct(x)) | ||
| 529 | } else { | ||
| 530 | None | ||
| 531 | } | ||
| 532 | } | ||
| 533 | |||
| 534 | fn for_each(&'a self, func: &dyn Fn(&MappedValue<'a>, &mut String) -> CrimResult<()>) -> CrimResult<String> { | ||
| 535 | let mut buf = String::new(); | ||
| 536 | for i in self { | ||
| 537 | func( &MappedValue::Struct(i), &mut buf )?; | ||
| 538 | } | ||
| 539 | Ok(buf) | ||
| 540 | } | ||
| 541 | } | ||
| 542 | |||
| 543 | #[test] | 525 | #[test] |
| 544 | fn custom() -> Result<(), CrimError> { | 526 | fn custom() -> Result<(), CrimError> { |
| 545 | let page = Page::new(); | 527 | let page = Page::new(); |
| @@ -552,9 +534,10 @@ Now with explicit outputs: | |||
| 552 | l.for_each(&|x: &MappedValue, buf: &mut String| { | 534 | l.for_each(&|x: &MappedValue, buf: &mut String| { |
| 553 | if let MappedValue::Struct(s) = x { | 535 | if let MappedValue::Struct(s) = x { |
| 554 | println!(" - {:?}", s.get_value(&"title")); | 536 | println!(" - {:?}", s.get_value(&"title")); |
| 537 | buf.push_str(&format!("{:?}",s.get_value(&"title"))); | ||
| 555 | } | 538 | } |
| 556 | Ok(()) | 539 | Ok(()) |
| 557 | }); | 540 | }).expect("loop"); |
| 558 | } | 541 | } |
| 559 | Ok(()) | 542 | Ok(()) |
| 560 | } | 543 | } |
