serde 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []