private ServiceElement convertService(DescriptorProtos.ServiceDescriptorProto sv) {
        String name = sv.getName();
        ImmutableList.Builder<RpcElement> rpcs = ImmutableList.builder();

        // Convert methods
        for (DescriptorProtos.MethodDescriptorProto md : sv.getMethodList()) {
            // Build method options
            ImmutableList.Builder<OptionElement> methodOptions = ImmutableList.builder();

            if (md.getOptions().hasDeprecated()) {
                methodOptions.add(new OptionElement(ProtoConstants.DEPRECATED_OPTION, OptionElement.Kind.BOOLEAN,
                    md.getOptions().getDeprecated(), false));
            }

            if (md.getOptions().hasIdempotencyLevel()) {
                methodOptions.add(new OptionElement(ProtoConstants.IDEMPOTENCY_LEVEL_OPTION, OptionElement.Kind.ENUM,
                    md.getOptions().getIdempotencyLevel(), false));
            }

            // Create RPC element
            rpcs.add(new RpcElement(DEFAULT_LOCATION, md.getName(), "",
                getTypeName(md.getInputType()),
                getTypeName(md.getOutputType()),
                md.getClientStreaming(),
                md.getServerStreaming(),
                methodOptions.build()));
        }

        // Build service options
        ImmutableList.Builder<OptionElement> serviceOptions = ImmutableList.builder();
        if (sv.getOptions().hasDeprecated()) {
            serviceOptions.add(new OptionElement(ProtoConstants.DEPRECATED_OPTION, OptionElement.Kind.BOOLEAN,
                sv.getOptions().getDeprecated(), false));
        }

        return new ServiceElement(DEFAULT_LOCATION, name, "", rpcs.build(), serviceOptions.build());
    }
Converter implementation for FileDescriptor to Wire Schema elements.
core/src/main/java/kafka/automq/table/deserializer/proto/parse/converter/FileDescriptorConverter.java