Class: Rust::Types::String

Inherits:
Type
  • Object
show all
Defined in:
lib/rust_require/types/string.rb

Instance Attribute Summary

Attributes inherited from Type

#rust_type

Instance Method Summary collapse

Methods inherited from Type

#c_type, #ffi_input_type, #ffi_output_type, #initialize, rust_type, #rust_type_regex

Constructor Details

This class inherits a constructor from Rust::Types::Type

Instance Method Details

#c_input_conversion(slice) ⇒ Object



42
43
44
# File 'lib/rust_require/types/string.rb', line 42

def c_input_conversion(slice)
  not_implemented
end

#c_input_typeObject



12
13
14
# File 'lib/rust_require/types/string.rb', line 12

def c_input_type
  not_implemented
end

#c_output_conversion(name) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rust_require/types/string.rb', line 18

def c_output_conversion(name)
  "  {\n      let mut \#{name} = \#{name};\n\n      // deallocate unused capacity if any\n      if \#{name}.len() != \#{name}.capacity() {\n          unsafe {\n              let ptr = \#{name}.as_mut_vec().as_mut_ptr();\n              std::rt::heap::deallocate(\n                  ptr.offset(\#{name}.len() as isize),\n                  \#{name}.capacity() - \#{name}.len(),\n                  std::mem::min_align_of::<u8>()\n              );\n          }\n      }\n\n      let tuple = (\#{name}.as_ptr(), \#{name}.len());\n      std::mem::forget(\#{name});\n      tuple\n  }\n  CODE\nend\n"

#c_output_typeObject



16
# File 'lib/rust_require/types/string.rb', line 16

def c_output_type; '(*const u8,usize)'; end

#ffi_typeObject



46
# File 'lib/rust_require/types/string.rb', line 46

def ffi_type; Rust::Slice.by_value; end

#not_implementedObject

Raises:

  • (NotImplementedError)


8
9
10
# File 'lib/rust_require/types/string.rb', line 8

def not_implemented
  raise NotImplementedError, 'String as rust input type is not supported, use &str instead!'
end

#ruby_input_conversion(str) ⇒ Object



53
54
55
# File 'lib/rust_require/types/string.rb', line 53

def ruby_input_conversion(str)
  not_implemented
end

#ruby_output_conversion(slice) ⇒ Object



48
49
50
51
# File 'lib/rust_require/types/string.rb', line 48

def ruby_output_conversion(slice)
  (start,len) = slice.unpack
  start.read_string(len.to_i).force_encoding("UTF-8")
end