about summary refs log tree commit diff
path: root/users/Profpatsch/netencode/netencode.rs
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2021-02-13T13·23+0100
committerProfpatsch <mail@profpatsch.de>2021-02-13T20·00+0000
commit1d752f031b116a759a14322debf9faa0a834664c (patch)
treedca4b7e565de95fd0bc20dbb975fe028ba96a3da /users/Profpatsch/netencode/netencode.rs
parent1b706b5ae3514082f4d64eb5718a9f73bcdd46bd (diff)
feat(users/Profpatsch/netencode): add dec::Try r/2209
Tries to decode the inner type, turning it into an Option.

Change-Id: I29d1286fe873c28d7c4a4b71f220acaf2d23f8e1
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2522
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
Diffstat (limited to 'users/Profpatsch/netencode/netencode.rs')
-rw-r--r--users/Profpatsch/netencode/netencode.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/users/Profpatsch/netencode/netencode.rs b/users/Profpatsch/netencode/netencode.rs
index f2fef1e109..2800326092 100644
--- a/users/Profpatsch/netencode/netencode.rs
+++ b/users/Profpatsch/netencode/netencode.rs
@@ -758,11 +758,19 @@ pub mod dec {
         }
     }
 
-    fn dec_u(b: &[u8]) -> Result<U, DecodeError> {
-        match parse::u_u(b) {
-            Ok((b"", u)) => Ok(u),
-            Ok((rest, _)) => Err(DecodeError(format!("Cannot decode nested U, it contains trailing bytes"))),
-            Err(err) => Err(DecodeError(format!("Cannot decode nested U bytes: {:?}", err))),
+    #[derive(Clone)]
+    pub struct Try<T>(pub T);
+
+    impl <'a, Inner> Decoder<'a> for Try<Inner>
+        where Inner: Decoder<'a>
+    {
+        type A = Option<Inner::A>;
+        fn dec(&self, u: U<'a>) -> Result<Self::A, DecodeError> {
+            match self.0.dec(u) {
+                Ok(inner) => Ok(Some(inner)),
+                Err(err) => Ok(None)
+            }
         }
     }
+
 }