package io.muoncore.protocol.introspection.client; import io.muoncore.DiscoverySource; import io.muoncore.channel.Channel; import io.muoncore.api.ChannelFutureAdapter; import io.muoncore.channel.Channels; import io.muoncore.codec.CodecsSource; import io.muoncore.config.MuonConfigurationSource; import io.muoncore.descriptors.SchemasDescriptor; import io.muoncore.descriptors.ServiceExtendedDescriptor; import io.muoncore.api.MuonFuture; import io.muoncore.protocol.introspection.SchemaIntrospectionRequest; import io.muoncore.transport.TransportClientSource; public interface IntrospectionClientProtocolStack extends TransportClientSource, CodecsSource, MuonConfigurationSource, DiscoverySource { default MuonFuture<ServiceExtendedDescriptor> introspect(String serviceName) { Channel<String, ServiceExtendedDescriptor> api2rrp = Channels.channel("introspectionapi", "introspectionproto"); ChannelFutureAdapter<ServiceExtendedDescriptor, String> adapter = new ChannelFutureAdapter<>(api2rrp.left()); new IntrospectClientProtocol<>( serviceName, getConfiguration(), api2rrp.right(), getTransportClient().openClientChannel(), getCodecs(), getDiscovery()); return adapter.request(serviceName); } default MuonFuture<SchemasDescriptor> getSchemas(String serviceName, String protocol, String endpoint) { Channel<SchemaIntrospectionRequest, SchemasDescriptor> api2rrp = Channels.channel("introspectionapi", "introspectionproto"); ChannelFutureAdapter<SchemasDescriptor, SchemaIntrospectionRequest> adapter = new ChannelFutureAdapter<>(api2rrp.left()); new IntrospectSchemasClientProtocol<>( serviceName, getConfiguration(), api2rrp.right(), getTransportClient().openClientChannel(), getCodecs(), getDiscovery()); return adapter.request(new SchemaIntrospectionRequest(protocol, endpoint)); } }