subtle icon indicating copy to clipboard operation
subtle copied to clipboard

Combine multiple `CtOption`al results

Open krnak opened this issue 2 years ago • 1 comments

My problem

struct C(A, B);

fn create_c(a: &[u8], b: &[u8]) -> CtOption<C> {
    let a: CtOption<A> = A::from_bytes(a);
    let b: CtOption<B> = B::from_bytes(b);
    // ???
}

Proposed solution

impl<T,U> CtOption<T> {
    pub fn merge<U>(self, other: CtOption<U>) -> CtOption<(T,U)> {
        CtOption {
            value: (self.value, other.value),
            is_some: self.is_some & other.is_some,
        }
    }
}
let c = a.merge(b).map(|(a, b)| C(a,b));

May I prepare a PR? Or do you have any better idea?

krnak avatar Mar 16 '22 12:03 krnak

That API seems fine to me

tarcieri avatar Nov 29 '23 21:11 tarcieri