The closest analogue to Rust's enums is a union. You could define
`Result` like:

struct Result(T, E) {
    union {
        ok @0 :T;
        err @1 :E;
    }
}

Note however that rust-style error checking has problems in an rpc
context, in particular using this as a return value will defeat promise
pipelining, so if you intend on calling methods on the value wrapped in
`ok`, you may not want to do this if latency is a concern, using
capnproto exceptions instead. The rust implementation maps these to rust
`Result`s when you wait for a promise anyway.

One downside of using capnproto exceptions is that you don't have
the ability to define custom error types; there are a fixed set defined
by the RPC protocol and you can attach a string to them, but you can't
really do "structured" errors.

-Ian

Quoting Mostafa Sedaghat joo (2020-05-10 11:35:29)
>    AS [1]Cap'p Scheme Language says: "A struct or interface type may be
>    parameterized, making it �generic�."
>    I am wondering is it possible (technically) to have Generic Enums?
>    In Rust, this is very common that a method can return "Result" Generic
>    Enum, that can be an error or a generic value:
>    enum Result<T, E> {
>    � Ok(T),
>    � Err(E),
>    }
>    If technically it is not possible to define a generic enum, what is the
>    bests practice of define this function in Cap'n Proto:
>    fn foo() -> Result<String, Error> {
>    �  �  ...
>    }
>
>    --
>    You received this message because you are subscribed to the Google
>    Groups "Cap'n Proto" group.
>    To unsubscribe from this group and stop receiving emails from it, send
>    an email to [2][email protected].
>    To view this discussion on the web visit
>    [3]https://groups.google.com/d/msgid/capnproto/5515b78c-8da3-4fc8-9fb3-
>    93ff7c21ea26%40googlegroups.com.
>
> Verweise
>
>    1. https://capnproto.org/language.html#generic-types
>    2. mailto:[email protected]
>    3. 
> https://groups.google.com/d/msgid/capnproto/5515b78c-8da3-4fc8-9fb3-93ff7c21ea26%40googlegroups.com?utm_medium=email&utm_source=footer

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/158912964269.884.7812535641686610089%40localhost.localdomain.

Reply via email to