Thanks a lot for your very clear answer.

Christophe

Le vendredi 7 octobre 2022 à 22:42:04 UTC+2, [email protected] a écrit :

> Hi Christophe,
>
> There is no built-in mechanism for this. Instead, you have to build this 
> into your interface.
>
> Note that a `Client` object can be "safely" cast to any type using 
> `client.castAs<SomeInterfaceType>()`. I say "safely" meaning: you won't 
> violate C++ memory safety by this cast, even if the server doesn't actually 
> implement the type. Instead, if you cast to the wrong type, method calls on 
> that type will fail with UNIMPLEMENTED exceptions. The exception is 
> produced on the server side; the client side does not actually know the 
> destination type so cannot predict whether the method is supported.
>
> To that end, one way to query the type would be to simply try to call a 
> method on `ConcreteA` or `ConcreteB` and see if it fails with 
> `exception.getType() == kj::Exception::Type::UNIMPLEMENTED`.
>
> But if you'd like to avoid the round trip, then I would suggest that 
> `getAbstracts()` should return a list that contains not just the interface 
> pointers, but also associated metadata identifying what type it is.
>
> -Kenton
>
> On Fri, Oct 7, 2022 at 5:05 AM Christophe Alexandre <
> [email protected]> wrote:
>
>> Hi,
>> Sorry for the newbie question.
>>
>> I've read the following thread and this is related to the same kind of 
>> question.
>> https://groups.google.com/g/capnproto/c/XLo5RPLpVBg/m/LI_sGi72AgAJ
>>
>> With following schema example:
>> interface Abstract {} 
>> interface ConcreteA extends(Abstract) {} 
>> interface ConcreteB extends(Abstract) {} 
>> interface Object { 
>>   getAbstracts @0 () -> (abstracts :List(Abstract)); 
>> }
>>
>> When implementing getAbstracts on the server side, only ConcreteA or 
>> ConcreteB objects are constructed and returned.
>> My question is: on the client side, what is the best practice for 
>> determining the Abstract object concrete type and casting it to ConcreteA 
>> or ConcreteB. Something equivalent to C++ dynamic_cast.
>>
>> Thanks !
>> Christophe Alexandre
>>
>> -- 
>> 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/1613eaaf-6025-4eb0-90c3-a7f4a98a2e21n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/capnproto/1613eaaf-6025-4eb0-90c3-a7f4a98a2e21n%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/f2c6f5d1-b3c5-4436-85c9-45cf24a0a0ddn%40googlegroups.com.

Reply via email to