1# Copyright (c) 2021-2024 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14require 'ostruct' 15require 'delegate' 16 17class String 18 def camelize 19 self.split('_').collect(&:capitalize).join 20 end 21 22 def camelizeback 23 self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join 24 end 25end 26 27class Field 28 attr_reader :name 29 attr_reader :type 30 31 def initialize(event, dscr) 32 @dscr = dscr 33 @name = dscr['name'] 34 if dscr['type'] =='enum' 35 @type = event.name.camelize + dscr['name'].camelize 36 else 37 @type = dscr['type'] 38 end 39 @need_move = ['std::string'].include? @type 40 end 41 42 def arg_type 43 @need_move ? "const #{@type}&" : @type 44 end 45 46 def is_enum? 47 @dscr['type'] =='enum' 48 end 49 50 def enums 51 return @dscr['enum'] 52 end 53end 54 55class Event 56 attr_reader :name 57 58 def initialize(dscr) 59 @dscr = dscr 60 @name = dscr['name'] 61 end 62 63 def fields 64 @fields ||= @dscr['fields'].map { |field| Field.new(self, field) } 65 end 66 67 def enable? 68 @dscr.respond_to?('enable') ? @dscr['enable'] : true 69 end 70 71end 72 73module EventsData 74 module_function 75 76 def events 77 @events 78 end 79 80 def wrap_data(data) 81 @events = data.events.map { |op| Event.new(op) } 82 end 83end 84 85def Gen.on_require(data) 86 EventsData.wrap_data(data) 87end 88