diff --git a/build/ruby/Rakefile b/build/ruby/Rakefile index 546f73e..8f6dfcf 100644 --- a/build/ruby/Rakefile +++ b/build/ruby/Rakefile @@ -40,7 +40,15 @@ namespace :generate_ruby do Dir["#{output_dir}/*_pb.rb"].each do |file| code = File.read(file) - code = code.gsub(/require '(\S+)_pb'/, "require_relative '\\1_pb'") + code = code.gsub(/require '(\S+)_pb'/) do |str| + match = Regexp.last_match[1] + + if File.exist?("#{output_dir}/#{match}_pb.rb") + "require_relative '#{match}_pb'" + else + str + end + end File.write(file, code) end end diff --git a/proto/sagittarius/datatype.proto b/proto/sagittarius/datatype.proto new file mode 100644 index 0000000..ecab9ee --- /dev/null +++ b/proto/sagittarius/datatype.proto @@ -0,0 +1,53 @@ +syntax = "proto3"; +import "translations.proto"; +import "google/protobuf/any.proto"; + +option ruby_package = "Tucana::Sagittarius"; + +package sagittarius; + +message DataType { + enum Variant { + UNKNOWN = 0; + PRIMITIVE = 1; + TYPE = 2; + OBJECT = 3; + DATATYPE = 4; + ARRAY = 5; + GENERIC = 6; + FUNCTION = 7; + } + + shared.Translation name = 1; + Variant variant = 2; + repeated DataTypeRule rules = 3; + repeated DataType input_types = 4; + optional DataType return_type = 5; + optional DataType parent_type = 6; +} + +message DataTypeRule { + enum Variant { + UNKNOWN = 0; + REGEX = 1; + NUMBER_RANGE = 2; + ITEM_OF_COLLECTION = 3; + CONTAINS_TYPE = 4; + CONTAINS_KEY = 5; + } + + Variant variant = 1; + map config = 2; +} + +message DataTypeUpdateRequest { + repeated DataType data_types = 1; +} + +message DataTypeUpdateResponse { + bool success = 1; +} + +service DataTypeService { + rpc Update(DataTypeUpdateRequest) returns (DataTypeUpdateResponse) {} +} diff --git a/proto/shared/translations.proto b/proto/shared/translations.proto new file mode 100644 index 0000000..11daf6c --- /dev/null +++ b/proto/shared/translations.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +option ruby_package = "Tucana::Shared"; + +package shared; + +message Translation { + string code = 1; + string text = 2; +}