# frozen_string_literal: true require_relative "./rpc" module ProtoDsl # Service class class Service attr_reader :name, :rpcs def initialize(name) @name = name @rpcs = [] end def rpc(name, request_type, response_type, &block) rpc = Rpc.new(name, request_type, response_type) rpc.instance_eval(&block) if block_given? @rpcs << rpc end def to_proto output = "service #{@name} {\n" @rpcs.each do |rpc| output << rpc.to_proto end output << "}\n" output end def to_server_code output = +"" @rpcs.each do |rpc| output << rpc.to_server_code end output end end end