Class: Oso::Polar::FFI::Polar
- Inherits:
-
FFI::AutoPointer
- Object
- FFI::AutoPointer
- Oso::Polar::FFI::Polar
- Defined in:
- lib/oso/polar/ffi.rb,
lib/oso/polar/ffi/polar.rb
Overview
Wrapper class for Polar FFI pointer + operations.
Instance Attribute Summary collapse
-
#enrich_message ⇒ Object
rubocop:disable Metrics/ClassLength.
Class Method Summary collapse
Instance Method Summary collapse
- #build_data_filter(types, partials, variable, class_tag) ⇒ Object
- #build_filter_plan(types, partials, variable, class_tag) ⇒ Object
- #check_result(res) ⇒ Object
- #clear_rules ⇒ Object
- #load(sources) ⇒ Object
- #new_id ⇒ Integer
- #new_query_from_str(str) ⇒ FFI::Query
- #new_query_from_term(term) ⇒ FFI::Query
- #next_inline_query ⇒ FFI::Query?
- #next_message ⇒ Object
- #process_message(message, enrich_message) ⇒ Object
- #process_messages ⇒ Object
- #register_constant(value, name:) ⇒ Object
- #register_mro(name, mro) ⇒ Object
- #zero? ⇒ Boolean
Instance Attribute Details
#enrich_message ⇒ Object
rubocop:disable Metrics/ClassLength
10 11 12 |
# File 'lib/oso/polar/ffi/polar.rb', line 10 def @enrich_message end |
Class Method Details
.create ⇒ FFI::Polar
45 46 47 |
# File 'lib/oso/polar/ffi/polar.rb', line 45 def self.create Rust.new end |
.release(ptr) ⇒ Object
26 27 28 |
# File 'lib/oso/polar/ffi.rb', line 26 def self.release(ptr) Rust.free(ptr) unless ptr.null? end |
Instance Method Details
#build_data_filter(types, partials, variable, class_tag) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/oso/polar/ffi/polar.rb', line 59 def build_data_filter(types, partials, variable, class_tag) types = JSON.dump(types) partials = JSON.dump(partials) plan = Rust.build_data_filter(self, types, partials, variable, class_tag) plan = check_result plan # TODO(gw) more error checking? JSON.parse plan.to_s end |
#build_filter_plan(types, partials, variable, class_tag) ⇒ Object
49 50 51 52 53 54 55 56 57 |
# File 'lib/oso/polar/ffi/polar.rb', line 49 def build_filter_plan(types, partials, variable, class_tag) types = JSON.dump(types) partials = JSON.dump(partials) plan = Rust.build_filter_plan(self, types, partials, variable, class_tag) plan = check_result plan # TODO(gw) more error checking? JSON.parse plan.to_s end |
#check_result(res) ⇒ Object
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/oso/polar/ffi/polar.rb', line 159 def check_result(res) result = res[:result] error = res[:error] Rust.result_free(res) raise 'internal error: both result and error pointers are not null' if !error.null? && !result.zero? raise FFI::Error.get(error, ) unless error.null? result end |
#clear_rules ⇒ Object
78 79 80 81 82 |
# File 'lib/oso/polar/ffi/polar.rb', line 78 def clear_rules cleared = Rust.clear_rules(self) check_result cleared end |
#load(sources) ⇒ Object
71 72 73 74 75 |
# File 'lib/oso/polar/ffi/polar.rb', line 71 def load(sources) loaded = Rust.load(self, JSON.dump(sources)) check_result loaded end |
#new_id ⇒ Integer
95 96 97 |
# File 'lib/oso/polar/ffi/polar.rb', line 95 def new_id Rust.new_id(self) end |
#new_query_from_str(str) ⇒ FFI::Query
102 103 104 105 106 |
# File 'lib/oso/polar/ffi/polar.rb', line 102 def new_query_from_str(str) query = Rust.new_query_from_str(self, str, 0) check_result query end |
#new_query_from_term(term) ⇒ FFI::Query
111 112 113 114 115 |
# File 'lib/oso/polar/ffi/polar.rb', line 111 def new_query_from_term(term) query = Rust.new_query_from_term(self, JSON.dump(term), 0) check_result query end |
#next_inline_query ⇒ FFI::Query?
87 88 89 90 91 |
# File 'lib/oso/polar/ffi/polar.rb', line 87 def next_inline_query query = Rust.next_inline_query(self, 0) query.null? ? nil : query end |
#next_message ⇒ Object
133 134 135 |
# File 'lib/oso/polar/ffi/polar.rb', line 133 def check_result Rust.(self) end |
#process_message(message, enrich_message) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/oso/polar/ffi/polar.rb', line 137 def (, ) = JSON.parse(.to_s) kind = ['kind'] msg = .call(['msg']) case kind when 'Print' puts(msg) when 'Warning' warn(format('[warning] %<msg>s', msg: msg)) end end |
#process_messages ⇒ Object
150 151 152 153 154 155 156 157 |
# File 'lib/oso/polar/ffi/polar.rb', line 150 def loop do = break if .null? (, ) end end |
#register_constant(value, name:) ⇒ Object
120 121 122 123 |
# File 'lib/oso/polar/ffi/polar.rb', line 120 def register_constant(value, name:) registered = Rust.register_constant(self, name, JSON.dump(value)) check_result registered end |
#register_mro(name, mro) ⇒ Object
128 129 130 131 |
# File 'lib/oso/polar/ffi/polar.rb', line 128 def register_mro(name, mro) registered = Rust.register_mro(self, name, JSON.dump(mro)) check_result registered end |
#zero? ⇒ Boolean
22 23 24 |
# File 'lib/oso/polar/ffi.rb', line 22 def zero? null? end |