serde 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 56ecad527ba63b8bab91bf3c1f6f69db7b47a2154e61d79163a5a998683682d0
4
+ data.tar.gz: 36c782fa69b87ed6e44273b11a73d136665b2e66194d4d6a42d9a9c6f180518e
5
+ SHA512:
6
+ metadata.gz: 403cd1c381aeb30ee51cb793ee4fb16b07768d982d6e6654ef498840c66c48584263f7e7590077a43ad31a157341b9f274d8377c102f762714f63ee47b9993ee
7
+ data.tar.gz: ae956ed2dd8d82640ea69cc8011308ec904c71019e910136d41cd989d1ebe7c43e09f263d7eb1abee3feeb08c3fcaa1486fefef0b818af331fcd1d8f94d55ba0
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /tmp
2
+ /_target_
3
+ /serde-*.gem
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ group :development, :test do
5
+ gem 'surrealist'
6
+ gem 'benchmark-ips'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,63 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ serde (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ast (2.4.0)
10
+ benchmark-ips (2.7.2)
11
+ coderay (1.1.2)
12
+ diff-lcs (1.3)
13
+ jaro_winkler (1.5.1)
14
+ method_source (0.9.2)
15
+ oj (3.7.1)
16
+ parallel (1.12.1)
17
+ parser (2.5.3.0)
18
+ ast (~> 2.4.0)
19
+ powerpack (0.1.2)
20
+ pry (0.12.2)
21
+ coderay (~> 1.1.0)
22
+ method_source (~> 0.9.0)
23
+ rainbow (3.0.0)
24
+ rspec (3.8.0)
25
+ rspec-core (~> 3.8.0)
26
+ rspec-expectations (~> 3.8.0)
27
+ rspec-mocks (~> 3.8.0)
28
+ rspec-core (3.8.0)
29
+ rspec-support (~> 3.8.0)
30
+ rspec-expectations (3.8.2)
31
+ diff-lcs (>= 1.2.0, < 2.0)
32
+ rspec-support (~> 3.8.0)
33
+ rspec-mocks (3.8.0)
34
+ diff-lcs (>= 1.2.0, < 2.0)
35
+ rspec-support (~> 3.8.0)
36
+ rspec-support (3.8.0)
37
+ rubocop (0.60.0)
38
+ jaro_winkler (~> 1.5.1)
39
+ parallel (~> 1.10)
40
+ parser (>= 2.5, != 2.5.1.1)
41
+ powerpack (~> 0.1)
42
+ rainbow (>= 2.2.2, < 4.0)
43
+ ruby-progressbar (~> 1.7)
44
+ unicode-display_width (~> 1.4.0)
45
+ ruby-progressbar (1.10.0)
46
+ surrealist (1.3.1)
47
+ oj (~> 3.0)
48
+ unicode-display_width (1.4.0)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ benchmark-ips
55
+ bundler (~> 1.17)
56
+ pry (~> 0.12)
57
+ rspec (~> 3.8)
58
+ rubocop (~> 0.60)
59
+ serde!
60
+ surrealist
61
+
62
+ BUNDLED WITH
63
+ 1.17.1
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Alexander Komarov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # serde.rb
2
+
3
+ WIP
4
+
5
+ # TODO:
6
+
7
+ - [ ] Write the README
8
+ - [ ] Use a temporary directory instead of `_target_`
9
+ - [ ] Write specs
10
+ - [ ] Set up rubocop
11
+ - [ ] Set up CI
12
+ - [ ] Reuse Rust crate, but generate sources in a temp dir
13
+ - [ ] Cover all basic types (Integer, String, Float, Boolean)
14
+ - [ ] Nullable types
15
+ - [ ] Composite types (ArrayOf, HashMap?, Enum)
16
+ - [ ] Vendor `rustc` with the gem
17
+ - [ ] Write benchmarks, compare with Surrealist
18
+ - [ ] Allow dynamic hashes?
19
+ - [ ] Type checks and coercions?
@@ -0,0 +1 @@
1
+ gem 'serde', path: '../..'
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: ../..
3
+ specs:
4
+ serde (0.1.0)
5
+
6
+ GEM
7
+ specs:
8
+
9
+ PLATFORMS
10
+ ruby
11
+
12
+ DEPENDENCIES
13
+ serde!
14
+
15
+ BUNDLED WITH
16
+ 1.17.1
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'serde'
5
+
6
+ class CowSerializer < Serde::Serializer
7
+ schema(
8
+ id: Integer,
9
+ name: String,
10
+ )
11
+ end
12
+
13
+ class Cow
14
+ attr_reader :id, :name
15
+
16
+ def initialize(id, name)
17
+ @id = id
18
+ @name = name
19
+ end
20
+ end
21
+
22
+ puts CowSerializer.new(Cow.new(1, 'Ковыч')).to_json
@@ -0,0 +1,50 @@
1
+ require 'erb'
2
+
3
+ def generate_serializers
4
+ def underscore(str)
5
+ str.tr('::', '/')
6
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
7
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
8
+ .tr('-', '_')
9
+ .downcase
10
+ end
11
+
12
+ modules = []
13
+
14
+ Serde.subclasses.each do |klass|
15
+ schema = klass.instance_variable_get(:@schema)
16
+ raise 'pls define a schema' if schema.nil?
17
+
18
+ module_name = underscore(klass.name)
19
+ fields = schema.map do |k, v|
20
+ type =
21
+ case v.to_s
22
+ when 'Integer' then 'i64'
23
+ when 'Float' then 'f64'
24
+ else v.to_s
25
+ end
26
+ { name: k, type: type }
27
+ end
28
+
29
+ modules << {
30
+ class_name: klass.name,
31
+ name: module_name,
32
+ fields: fields,
33
+ joint_fields: fields.map do |field|
34
+ "#{field[:name]}: #{field[:type]}"
35
+ end.join(', ')
36
+ }
37
+
38
+ mod_template = ERB.new(File.read('./rust_template/mod.rs.erb'))
39
+ compiled_template = mod_template.result(binding)
40
+
41
+ File.open("./src/#{module_name}.rs", 'w') { |f| f.write(compiled_template) }
42
+ end
43
+
44
+ lib_template = ERB.new(File.read('./rust_template/lib.rs.erb'))
45
+ compiled_template = lib_template.result(binding)
46
+
47
+ File.open("./src/lib.rs", 'w') { |f| f.write(compiled_template) }
48
+
49
+ `rake build`
50
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ module Serde
6
+ module SerializerGenerator
7
+ class << self
8
+ def call(klass)
9
+ schema = klass.instance_variable_get(:@schema)
10
+
11
+ name = underscore(klass.name)
12
+ fields = schema.map do |k, v|
13
+ v = v.to_s
14
+ type =
15
+ case v
16
+ when 'Integer' then 'i64'
17
+ when 'Float' then 'f64'
18
+ else v
19
+ end
20
+ ctype =
21
+ case v
22
+ when 'Integer' then 'int'
23
+ when 'String' then 'char*'
24
+ end
25
+ cdecl =
26
+ case v
27
+ when 'Integer' then "int c_#{k} = NUM2INT(#{k});"
28
+ when 'String' then "char* c_#{k} = StringValueCStr(#{k});"
29
+ end
30
+ rctype =
31
+ case v
32
+ when 'String' then '*const c_char'
33
+ when 'Integer' then 'i64'
34
+ when 'Float' then 'f64'
35
+ else v
36
+ end
37
+ { name: k, type: type, rctype: rctype, cdecl: cdecl, ctype: ctype }
38
+ end
39
+
40
+ serializer = {
41
+ class_name: klass.name,
42
+ name: name,
43
+ fields: fields,
44
+ joint_fields: fields.map do |field|
45
+ "#{field[:name]}: #{field[:type]}"
46
+ end.join(', '),
47
+ joint_fields_rctype: fields.map do |field|
48
+ "#{field[:name]}: #{field[:rctype]}"
49
+ end.join(', '),
50
+ joint_fields_c: fields.map do |field|
51
+ "#{field[:ctype]} #{field[:name]}"
52
+ end.join(', '),
53
+ }
54
+
55
+ mod_template = ERB.new(File.read('./templates/rust/mod.rs'))
56
+ compiled_template = mod_template.result(binding)
57
+
58
+ File.write("./rust/src/#{name}.rs", compiled_template)
59
+
60
+ c_template = ERB.new(File.read('./templates/c/serde_rb.c'))
61
+ compiled_template = c_template.result(binding)
62
+
63
+ File.write('./_target_/serde_rb/serde_rb.c', compiled_template)
64
+
65
+ lib_template = ERB.new(File.read('./templates/rust/lib.rs'))
66
+ compiled_template = lib_template.result(binding)
67
+
68
+ File.write("./rust/src/lib.rs", compiled_template)
69
+ end
70
+
71
+ private
72
+
73
+ def underscore(str)
74
+ str.tr('::', '/')
75
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
76
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
77
+ .tr('-', '_')
78
+ .downcase
79
+ end
80
+ end
81
+ end
82
+ end
data/lib/serde.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'fileutils'
2
+ require_relative 'serde/serializer_generator.rb'
3
+
4
+ FileUtils.rm_r(Dir.glob('_target_/*'))
5
+ FileUtils.cp_r(Dir.glob('templates/extension/*'), '_target_')
6
+
7
+ module Serde
8
+ class Serializer
9
+ class << self
10
+ def schema(**attrs)
11
+ @schema = attrs
12
+ SerializerGenerator.call(self)
13
+ Dir.chdir(File.expand_path('../_target_', __dir__)) do
14
+ `make`
15
+ end
16
+
17
+ require_relative '../_target_/serde_rb/serde_rb'
18
+ end
19
+
20
+ def get_schema
21
+ @schema
22
+ end
23
+ end
24
+
25
+ def initialize(object)
26
+ @args = self.class.get_schema.keys.map { |k| object.public_send(k) }
27
+ end
28
+
29
+ def to_json
30
+ internal_to_json(*@args)
31
+ end
32
+ end
33
+ end
data/rust/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /target
2
+ /src/*.rs
data/rust/Cargo.lock ADDED
@@ -0,0 +1,85 @@
1
+ [[package]]
2
+ name = "itoa"
3
+ version = "0.4.3"
4
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5
+
6
+ [[package]]
7
+ name = "proc-macro2"
8
+ version = "0.4.24"
9
+ source = "registry+https://github.com/rust-lang/crates.io-index"
10
+ dependencies = [
11
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "quote"
16
+ version = "0.6.10"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ dependencies = [
19
+ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
20
+ ]
21
+
22
+ [[package]]
23
+ name = "ryu"
24
+ version = "0.2.7"
25
+ source = "registry+https://github.com/rust-lang/crates.io-index"
26
+
27
+ [[package]]
28
+ name = "serde"
29
+ version = "1.0.80"
30
+ source = "registry+https://github.com/rust-lang/crates.io-index"
31
+
32
+ [[package]]
33
+ name = "serde_derive"
34
+ version = "1.0.80"
35
+ source = "registry+https://github.com/rust-lang/crates.io-index"
36
+ dependencies = [
37
+ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
38
+ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
39
+ "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)",
40
+ ]
41
+
42
+ [[package]]
43
+ name = "serde_json"
44
+ version = "1.0.33"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ dependencies = [
47
+ "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
48
+ "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
49
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
50
+ ]
51
+
52
+ [[package]]
53
+ name = "serde_rb"
54
+ version = "0.0.1"
55
+ dependencies = [
56
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
57
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
58
+ "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
59
+ ]
60
+
61
+ [[package]]
62
+ name = "syn"
63
+ version = "0.15.22"
64
+ source = "registry+https://github.com/rust-lang/crates.io-index"
65
+ dependencies = [
66
+ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
67
+ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
68
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
69
+ ]
70
+
71
+ [[package]]
72
+ name = "unicode-xid"
73
+ version = "0.1.0"
74
+ source = "registry+https://github.com/rust-lang/crates.io-index"
75
+
76
+ [metadata]
77
+ "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
78
+ "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
79
+ "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
80
+ "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7"
81
+ "checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef"
82
+ "checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c"
83
+ "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811"
84
+ "checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7"
85
+ "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
data/rust/Cargo.toml ADDED
@@ -0,0 +1,13 @@
1
+ [package]
2
+ name = "serde_rb"
3
+ version = "0.0.1"
4
+ authors = ["Alexander Komarov <ak@akxcv.com>"]
5
+ edition = "2018"
6
+
7
+ [lib]
8
+ crate-type = ["staticlib", "cdylib"]
9
+
10
+ [dependencies]
11
+ serde = "*"
12
+ serde_derive = "*"
13
+ serde_json = "*"
data/rust/src/.keep ADDED
File without changes
data/serde.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('../lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.required_ruby_version = '>= 2.5.0'
8
+
9
+ spec.name = 'serde'
10
+ spec.version = '0.0.1'
11
+ spec.authors = ['Alexander Komarov']
12
+ spec.email = %w[ak@akxcv.com]
13
+
14
+ spec.summary = %q(Fast, compiled serializers for Ruby.)
15
+ spec.description = %q(Fast, compiled serializers for Ruby. Powered by serde.rs.)
16
+ spec.homepage = 'https://github.com/akxcv/serde.rb'
17
+ spec.license = 'MIT'
18
+
19
+ spec.require_paths = %w[lib]
20
+
21
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
22
+ f.match(%r{^(test|spec|features)/})
23
+ end
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.17'
26
+ spec.add_development_dependency 'pry', '~> 0.12'
27
+ spec.add_development_dependency 'rspec', '~> 3.8'
28
+ spec.add_development_dependency 'rubocop', '~> 0.60'
29
+ end
@@ -0,0 +1,15 @@
1
+ #include <stdio.h>
2
+ #include <ruby.h>
3
+
4
+ extern char *serde_rb_rs_<%= serializer[:name] %>(<%= serializer[:joint_fields_c] %>);
5
+
6
+ VALUE c_to_json(VALUE _instance, <%= serializer[:fields].map { |f| "VALUE #{f[:name]}" }.join(', ') %>) {
7
+ <%= serializer[:fields].map { |f| f[:cdecl] }.join("\n") %>
8
+ return rb_str_new2(serde_rb_rs_<%= serializer[:name] %>(<%= serializer[:fields].map { |f| "c_#{f[:name]}" }.join(', ') %>));
9
+ }
10
+
11
+ void Init_serde_rb(void) {
12
+ VALUE klass = rb_const_get(rb_cObject, rb_intern("<%= serializer[:class_name] %>"));
13
+
14
+ rb_define_method(klass, "internal_to_json", c_to_json, <%= serializer[:fields].length %>);
15
+ }
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+
3
+ have_library('serde_rb')
4
+
5
+ create_makefile 'serde_rb/serde_rb'
@@ -0,0 +1,21 @@
1
+ extern crate serde;
2
+ #[macro_use]
3
+ extern crate serde_derive;
4
+ extern crate serde_json;
5
+ use std::os::raw::c_char;
6
+ use std::ffi::CStr;
7
+
8
+ mod <%= serializer[:name] %>;
9
+
10
+ #[no_mangle]
11
+ pub extern "C" fn serde_rb_rs_<%= serializer[:name] %> (<%= serializer[:joint_fields_rctype] %>) -> *const u8 {
12
+ let name = unsafe {
13
+ CStr::from_ptr(name).to_string_lossy().into_owned()
14
+ };
15
+ let instance = <%= serializer[:name] %>::Struct {
16
+ <% serializer[:fields].each do |field| %>
17
+ <%= field[:name] %>,
18
+ <% end %>
19
+ };
20
+ serde_json::to_string(&instance).unwrap().as_ptr()
21
+ }
@@ -0,0 +1,6 @@
1
+ #[derive(Serialize)]
2
+ pub struct Struct {
3
+ <% fields.each do |field| %>
4
+ pub <%= field[:name] %>: <%= field[:type] %>,
5
+ <% end %>
6
+ }
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: serde
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Komarov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.60'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.60'
69
+ description: Fast, compiled serializers for Ruby. Powered by serde.rs.
70
+ email:
71
+ - ak@akxcv.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - LICENSE
80
+ - README.md
81
+ - examples/app/Gemfile
82
+ - examples/app/Gemfile.lock
83
+ - examples/app/new.rb
84
+ - lib/serde.rb
85
+ - lib/serde/generate.rb
86
+ - lib/serde/serializer_generator.rb
87
+ - rust/.gitignore
88
+ - rust/Cargo.lock
89
+ - rust/Cargo.toml
90
+ - rust/src/.keep
91
+ - serde.gemspec
92
+ - templates/c/serde_rb.c
93
+ - templates/extension/serde_rb/extconf.rb
94
+ - templates/rust/lib.rs
95
+ - templates/rust/mod.rs
96
+ homepage: https://github.com/akxcv/serde.rb
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 2.5.0
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.7.6
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Fast, compiled serializers for Ruby.
120
+ test_files: []