capn_proto 0.0.1.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +2 -0
- data/LICENSE +19 -0
- data/README.md +42 -0
- data/Rakefile +25 -0
- data/capn_proto.gemspec +33 -0
- data/examples/addressbook.bin +0 -0
- data/examples/addressbook.capnp +31 -0
- data/examples/create_test_data.py +39 -0
- data/examples/example.rb +38 -0
- data/ext/capn_proto/.ycm_extra_conf.py +65 -0
- data/ext/capn_proto/.ycm_extra_conf.pyc +0 -0
- data/ext/capn_proto/class_builder.cc +80 -0
- data/ext/capn_proto/class_builder.h +72 -0
- data/ext/capn_proto/dynamic_list_reader.cc +52 -0
- data/ext/capn_proto/dynamic_list_reader.h +23 -0
- data/ext/capn_proto/dynamic_struct_reader.cc +59 -0
- data/ext/capn_proto/dynamic_struct_reader.h +23 -0
- data/ext/capn_proto/dynamic_value_reader.cc +50 -0
- data/ext/capn_proto/dynamic_value_reader.h +13 -0
- data/ext/capn_proto/exception.cc +24 -0
- data/ext/capn_proto/exception.h +18 -0
- data/ext/capn_proto/extconf.rb +29 -0
- data/ext/capn_proto/field_list.cc +51 -0
- data/ext/capn_proto/field_list.h +23 -0
- data/ext/capn_proto/init.cc +34 -0
- data/ext/capn_proto/list_nested_node_reader.cc +50 -0
- data/ext/capn_proto/list_nested_node_reader.h +24 -0
- data/ext/capn_proto/message_reader.cc +30 -0
- data/ext/capn_proto/message_reader.h +17 -0
- data/ext/capn_proto/nested_node_reader.cc +42 -0
- data/ext/capn_proto/nested_node_reader.h +21 -0
- data/ext/capn_proto/parsed_schema.cc +58 -0
- data/ext/capn_proto/parsed_schema.h +23 -0
- data/ext/capn_proto/rb.cc +0 -0
- data/ext/capn_proto/rb.h +0 -0
- data/ext/capn_proto/ruby_capn_proto.cc +4 -0
- data/ext/capn_proto/ruby_capn_proto.h +38 -0
- data/ext/capn_proto/schema_node_reader.cc +51 -0
- data/ext/capn_proto/schema_node_reader.h +22 -0
- data/ext/capn_proto/schema_parser.cc +53 -0
- data/ext/capn_proto/schema_parser.h +20 -0
- data/ext/capn_proto/stream_fd_message_reader.cc +53 -0
- data/ext/capn_proto/stream_fd_message_reader.h +21 -0
- data/ext/capn_proto/struct_schema.cc +57 -0
- data/ext/capn_proto/struct_schema.h +23 -0
- data/ext/capn_proto/util.cc +25 -0
- data/ext/capn_proto/util.h +16 -0
- data/lib/capn_proto/version.rb +3 -0
- data/lib/capn_proto.rb +88 -0
- data/media/captain_proto.png +0 -0
- data/media/captain_proto_small.png +0 -0
- data/spec/addressbook.bin +0 -0
- data/spec/addressbook.capnp +31 -0
- data/spec/capn_proto_spec.rb +7 -0
- data/spec/create_test_data.py +38 -0
- metadata +188 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
#include "ruby_capn_proto.h"
|
2
|
+
#include "message_reader.h"
|
3
|
+
#include "stream_fd_message_reader.h"
|
4
|
+
#include "struct_schema.h"
|
5
|
+
#include "dynamic_struct_reader.h"
|
6
|
+
#include "class_builder.h"
|
7
|
+
|
8
|
+
namespace ruby_capn_proto {
|
9
|
+
using WrappedType = capnp::StreamFdMessageReader;
|
10
|
+
VALUE StreamFdMessageReader::Class;
|
11
|
+
|
12
|
+
void StreamFdMessageReader::Init() {
|
13
|
+
ClassBuilder("StreamFdMessageReader", MessageReader::Class).
|
14
|
+
defineAlloc(&alloc).
|
15
|
+
defineMethod("initialize", &initialize).
|
16
|
+
defineMethod("get_root", &get_root).
|
17
|
+
store(&Class);
|
18
|
+
}
|
19
|
+
|
20
|
+
VALUE StreamFdMessageReader::alloc(VALUE klass) {
|
21
|
+
return Data_Wrap_Struct(klass, NULL, free, ruby_xmalloc(sizeof(WrappedType)));
|
22
|
+
}
|
23
|
+
|
24
|
+
VALUE StreamFdMessageReader::initialize(VALUE self, VALUE rb_io) {
|
25
|
+
VALUE rb_fileno = rb_funcall(rb_io, rb_intern("fileno"), 0);
|
26
|
+
auto fileno = FIX2INT(rb_fileno);
|
27
|
+
WrappedType* p = unwrap(self);
|
28
|
+
new (p) WrappedType(fileno);
|
29
|
+
|
30
|
+
return Qnil;
|
31
|
+
}
|
32
|
+
|
33
|
+
void StreamFdMessageReader::free(WrappedType* p) {
|
34
|
+
p->~StreamFdMessageReader();
|
35
|
+
ruby_xfree(p);
|
36
|
+
}
|
37
|
+
|
38
|
+
WrappedType* StreamFdMessageReader::unwrap(VALUE self) {
|
39
|
+
WrappedType* p;
|
40
|
+
Data_Get_Struct(self, WrappedType, p);
|
41
|
+
return p;
|
42
|
+
}
|
43
|
+
|
44
|
+
VALUE StreamFdMessageReader::get_root(VALUE self, VALUE rb_schema) {
|
45
|
+
if (rb_respond_to(rb_schema, rb_intern("schema"))) {
|
46
|
+
rb_schema = rb_funcall(rb_schema, rb_intern("schema"), 0);
|
47
|
+
}
|
48
|
+
|
49
|
+
auto schema = *StructSchema::unwrap(rb_schema);
|
50
|
+
auto reader = unwrap(self)->getRoot<capnp::DynamicStruct>(schema);
|
51
|
+
return DynamicStructReader::create(reader);
|
52
|
+
}
|
53
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#ifndef STREAM_FD_MESSAGE_READER_H
|
2
|
+
#define STREAM_FD_MESSAGE_READER_H
|
3
|
+
|
4
|
+
#include "ruby_capn_proto.h"
|
5
|
+
|
6
|
+
namespace ruby_capn_proto {
|
7
|
+
class StreamFdMessageReader {
|
8
|
+
public:
|
9
|
+
using WrappedType = capnp::StreamFdMessageReader;
|
10
|
+
static void Init();
|
11
|
+
static VALUE alloc(VALUE klass);
|
12
|
+
static VALUE initialize(VALUE klass, VALUE io);
|
13
|
+
static void free(WrappedType* p);
|
14
|
+
static WrappedType* unwrap(VALUE self);
|
15
|
+
static VALUE get_root(VALUE name, VALUE schema);
|
16
|
+
|
17
|
+
static VALUE Class;
|
18
|
+
};
|
19
|
+
}
|
20
|
+
|
21
|
+
#endif /* STREAM_FD_MESSAGE_READER_H */
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#include "ruby_capn_proto.h"
|
2
|
+
#include "struct_schema.h"
|
3
|
+
#include "field_list.h"
|
4
|
+
#include "class_builder.h"
|
5
|
+
#include "util.h"
|
6
|
+
|
7
|
+
namespace ruby_capn_proto {
|
8
|
+
using WrappedType = capnp::StructSchema;
|
9
|
+
VALUE StructSchema::Class;
|
10
|
+
|
11
|
+
void StructSchema::Init() {
|
12
|
+
ClassBuilder("StructSchema", rb_cObject).
|
13
|
+
defineAlloc(&alloc).
|
14
|
+
defineMethod("field_names", &field_names).
|
15
|
+
defineMethod("fields", &fields).
|
16
|
+
store(&Class);
|
17
|
+
}
|
18
|
+
|
19
|
+
void StructSchema::free(WrappedType* p) {
|
20
|
+
p->~StructSchema();
|
21
|
+
ruby_xfree(p);
|
22
|
+
}
|
23
|
+
|
24
|
+
VALUE StructSchema::alloc(VALUE klass) {
|
25
|
+
return Data_Wrap_Struct(klass, NULL, free, ruby_xmalloc(sizeof(WrappedType)));
|
26
|
+
}
|
27
|
+
|
28
|
+
WrappedType* StructSchema::unwrap(VALUE self) {
|
29
|
+
WrappedType* p;
|
30
|
+
Data_Get_Struct(self, WrappedType, p);
|
31
|
+
return p;
|
32
|
+
}
|
33
|
+
|
34
|
+
VALUE StructSchema::create(WrappedType schema) {
|
35
|
+
VALUE rb_obj = alloc(Class);
|
36
|
+
WrappedType* wrapped_schema = unwrap(rb_obj);
|
37
|
+
*wrapped_schema = kj::mv(schema);
|
38
|
+
|
39
|
+
return rb_obj;
|
40
|
+
}
|
41
|
+
|
42
|
+
VALUE StructSchema::field_names(VALUE self) {
|
43
|
+
auto field_list = unwrap(self)->getFields();
|
44
|
+
auto size = field_list.size();
|
45
|
+
auto rb_array = rb_ary_new2(size);
|
46
|
+
for (int i=0; i<size; i++) {
|
47
|
+
auto name = field_list[i].getProto().getName();
|
48
|
+
rb_ary_push(rb_array, rb_str_new(name.begin(), name.size()));
|
49
|
+
}
|
50
|
+
|
51
|
+
return rb_array;
|
52
|
+
}
|
53
|
+
|
54
|
+
VALUE StructSchema::fields(VALUE self) {
|
55
|
+
return FieldList::create(unwrap(self)->getFields());
|
56
|
+
}
|
57
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#ifndef STRUCT_SCHEMA_H
|
2
|
+
#define STRUCT_SCHEMA_H
|
3
|
+
|
4
|
+
#include "ruby_capn_proto.h"
|
5
|
+
|
6
|
+
namespace ruby_capn_proto {
|
7
|
+
class StructSchema {
|
8
|
+
public:
|
9
|
+
using WrappedType = capnp::StructSchema;
|
10
|
+
static void Init();
|
11
|
+
static VALUE alloc(VALUE klass);
|
12
|
+
static VALUE create(WrappedType schema);
|
13
|
+
static void free(WrappedType* p);
|
14
|
+
static WrappedType* unwrap(VALUE self);
|
15
|
+
static VALUE field_names(VALUE self);
|
16
|
+
static VALUE fields(VALUE self);
|
17
|
+
|
18
|
+
static VALUE Class;
|
19
|
+
};
|
20
|
+
}
|
21
|
+
|
22
|
+
|
23
|
+
#endif /* STRUCT_SCHEMA_H */
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#include "util.h"
|
2
|
+
|
3
|
+
namespace ruby_capn_proto {
|
4
|
+
kj::Array<kj::String> Util::toStringArray(VALUE rb_array) {
|
5
|
+
auto len = RARRAY_LEN(rb_array);
|
6
|
+
auto array = kj::heapArray<kj::String>(len);
|
7
|
+
for (int i=0; i < len; i++) {
|
8
|
+
auto rb_str = rb_ary_entry(rb_array, i);
|
9
|
+
array[i] = toString(rb_str);
|
10
|
+
}
|
11
|
+
|
12
|
+
return array;
|
13
|
+
}
|
14
|
+
|
15
|
+
kj::String Util::toString(VALUE rb_string) {
|
16
|
+
auto rb_val = StringValue(rb_string);
|
17
|
+
auto str = RSTRING_PTR(rb_val);
|
18
|
+
auto len = RSTRING_LEN(rb_val);
|
19
|
+
return kj::heapString(str, len);
|
20
|
+
}
|
21
|
+
|
22
|
+
VALUE Util::toRubyString(kj::StringPtr string) {
|
23
|
+
return rb_str_new(string.begin(), string.size());
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#ifndef UTIL_H
|
2
|
+
#define UTIL_H
|
3
|
+
|
4
|
+
#include "ruby_capn_proto.h"
|
5
|
+
|
6
|
+
namespace ruby_capn_proto {
|
7
|
+
class Util {
|
8
|
+
public:
|
9
|
+
static kj::Array<kj::String> toStringArray(VALUE array_of_strings);
|
10
|
+
static kj::String toString(VALUE string);
|
11
|
+
|
12
|
+
static VALUE toRubyString(kj::StringPtr string);
|
13
|
+
};
|
14
|
+
}
|
15
|
+
|
16
|
+
#endif /* UTIL_H */
|
data/lib/capn_proto.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'capn_proto/init'
|
2
|
+
|
3
|
+
module CapnProto
|
4
|
+
ListNestedNodeReader.class_eval do
|
5
|
+
include Enumerable
|
6
|
+
def each
|
7
|
+
(0...size).each do |n|
|
8
|
+
yield self[n]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
DynamicListReader.class_eval do
|
14
|
+
include Enumerable
|
15
|
+
def each
|
16
|
+
(0...size).each do |n|
|
17
|
+
yield self[n]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
DynamicStructReader.class_eval do
|
23
|
+
def method_missing(name, *args, &block)
|
24
|
+
self[name.to_s, *args, &block]
|
25
|
+
end
|
26
|
+
|
27
|
+
def each
|
28
|
+
(0...size).each do |n|
|
29
|
+
yield self[n]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module SchemaLoader
|
35
|
+
def schema_parser
|
36
|
+
@schema_parser
|
37
|
+
end
|
38
|
+
|
39
|
+
def load_schema(file_name, imports=[])
|
40
|
+
display_name = self.name
|
41
|
+
|
42
|
+
@schema_parser ||= CapnProto::SchemaParser.new
|
43
|
+
|
44
|
+
schema = @schema_parser.parse_disk_file(
|
45
|
+
display_name,
|
46
|
+
file_name,
|
47
|
+
imports);
|
48
|
+
|
49
|
+
_load_schema_rec(schema, self)
|
50
|
+
end
|
51
|
+
|
52
|
+
def _load_schema_rec(schema, mod)
|
53
|
+
node = schema.get_proto
|
54
|
+
nested_nodes = node.nested_nodes
|
55
|
+
|
56
|
+
if node.struct?
|
57
|
+
struct_schema = schema.as_struct
|
58
|
+
mod.instance_variable_set(:@schema, struct_schema)
|
59
|
+
mod.extend(Struct)
|
60
|
+
end
|
61
|
+
|
62
|
+
nested_nodes.each do |nested_node|
|
63
|
+
nested_mod = mod.const_set(nested_node.name, Module.new)
|
64
|
+
nested_schema = schema.get_nested(nested_node.name)
|
65
|
+
_load_schema_rec(nested_schema, nested_mod)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module Struct
|
70
|
+
def schema
|
71
|
+
@schema
|
72
|
+
end
|
73
|
+
|
74
|
+
def read_from(io)
|
75
|
+
reader = StreamFdMessageReader.new(io)
|
76
|
+
reader.get_root(self)
|
77
|
+
end
|
78
|
+
|
79
|
+
def read_packed_from(io)
|
80
|
+
raise 'not implemented'
|
81
|
+
end
|
82
|
+
|
83
|
+
def new_message(file)
|
84
|
+
raise 'not implemented'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,31 @@
|
|
1
|
+
@0x9eb32e19f86ee174;
|
2
|
+
|
3
|
+
struct Person {
|
4
|
+
id @0 :UInt32;
|
5
|
+
name @1 :Text;
|
6
|
+
email @2 :Text;
|
7
|
+
phones @3 :List(PhoneNumber);
|
8
|
+
|
9
|
+
struct PhoneNumber {
|
10
|
+
number @0 :Text;
|
11
|
+
type @1 :Type;
|
12
|
+
|
13
|
+
enum Type {
|
14
|
+
mobile @0;
|
15
|
+
home @1;
|
16
|
+
work @2;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
employment :union {
|
21
|
+
unemployed @4 :Void;
|
22
|
+
employer @5 :Text;
|
23
|
+
school @6 :Text;
|
24
|
+
selfEmployed @7 :Void;
|
25
|
+
# We assume that a person is only one of these.
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
struct AddressBook {
|
30
|
+
people @0 :List(Person);
|
31
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
from __future__ import print_function
|
3
|
+
import os
|
4
|
+
import capnp
|
5
|
+
|
6
|
+
this_dir = os.path.dirname(__file__)
|
7
|
+
addressbook = capnp.load(os.path.join(this_dir, 'addressbook.capnp'))
|
8
|
+
|
9
|
+
def writeAddressBook(file):
|
10
|
+
addresses = addressbook.AddressBook.newMessage()
|
11
|
+
people = addresses.init('people', 2)
|
12
|
+
|
13
|
+
alice = people[0]
|
14
|
+
alice.id = 123
|
15
|
+
alice.name = 'Alice'
|
16
|
+
alice.email = 'alice@example.com'
|
17
|
+
alicePhones = alice.init('phones', 1)
|
18
|
+
alicePhones[0].number = "555-1212"
|
19
|
+
alicePhones[0].type = 'mobile'
|
20
|
+
alice.employment.school = "MIT"
|
21
|
+
|
22
|
+
bob = people[1]
|
23
|
+
bob.id = 456
|
24
|
+
bob.name = 'Bob'
|
25
|
+
bob.email = 'bob@example.com'
|
26
|
+
bobPhones = bob.init('phones', 2)
|
27
|
+
bobPhones[0].number = "555-4567"
|
28
|
+
bobPhones[0].type = 'home'
|
29
|
+
bobPhones[1].number = "555-7654"
|
30
|
+
bobPhones[1].type = 'work'
|
31
|
+
bob.employment.unemployed = None
|
32
|
+
|
33
|
+
addresses.writeTo(file)
|
34
|
+
|
35
|
+
|
36
|
+
if __name__ == '__main__':
|
37
|
+
f = open('addressbook.bin', 'w')
|
38
|
+
writeAddressBook(f)
|
metadata
ADDED
@@ -0,0 +1,188 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capn_proto
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.alpha.1
|
5
|
+
prerelease: 6
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Charles Strahan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-09-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.14.1
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.14.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake-compiler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.7.6
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.7.6
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: awesome_print
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: interactive_editor
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: ! 'This gem wraps the official C++ implementation of Cap''n Proto (libcapnp).
|
95
|
+
From the Cap''n Proto documentation: "Cap''n Proto is an insanely fast data interchange
|
96
|
+
format and capability-based RPC system. Think JSON, except binary. Or think Protocol
|
97
|
+
Buffers, except faster."'
|
98
|
+
email:
|
99
|
+
- charles.c.strahan@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions:
|
102
|
+
- ext/capn_proto/extconf.rb
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- .gitignore
|
106
|
+
- Gemfile
|
107
|
+
- LICENSE
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- capn_proto.gemspec
|
111
|
+
- examples/addressbook.bin
|
112
|
+
- examples/addressbook.capnp
|
113
|
+
- examples/create_test_data.py
|
114
|
+
- examples/example.rb
|
115
|
+
- ext/capn_proto/.ycm_extra_conf.py
|
116
|
+
- ext/capn_proto/.ycm_extra_conf.pyc
|
117
|
+
- ext/capn_proto/class_builder.cc
|
118
|
+
- ext/capn_proto/class_builder.h
|
119
|
+
- ext/capn_proto/dynamic_list_reader.cc
|
120
|
+
- ext/capn_proto/dynamic_list_reader.h
|
121
|
+
- ext/capn_proto/dynamic_struct_reader.cc
|
122
|
+
- ext/capn_proto/dynamic_struct_reader.h
|
123
|
+
- ext/capn_proto/dynamic_value_reader.cc
|
124
|
+
- ext/capn_proto/dynamic_value_reader.h
|
125
|
+
- ext/capn_proto/exception.cc
|
126
|
+
- ext/capn_proto/exception.h
|
127
|
+
- ext/capn_proto/extconf.rb
|
128
|
+
- ext/capn_proto/field_list.cc
|
129
|
+
- ext/capn_proto/field_list.h
|
130
|
+
- ext/capn_proto/init.cc
|
131
|
+
- ext/capn_proto/list_nested_node_reader.cc
|
132
|
+
- ext/capn_proto/list_nested_node_reader.h
|
133
|
+
- ext/capn_proto/message_reader.cc
|
134
|
+
- ext/capn_proto/message_reader.h
|
135
|
+
- ext/capn_proto/nested_node_reader.cc
|
136
|
+
- ext/capn_proto/nested_node_reader.h
|
137
|
+
- ext/capn_proto/parsed_schema.cc
|
138
|
+
- ext/capn_proto/parsed_schema.h
|
139
|
+
- ext/capn_proto/rb.cc
|
140
|
+
- ext/capn_proto/rb.h
|
141
|
+
- ext/capn_proto/ruby_capn_proto.cc
|
142
|
+
- ext/capn_proto/ruby_capn_proto.h
|
143
|
+
- ext/capn_proto/schema_node_reader.cc
|
144
|
+
- ext/capn_proto/schema_node_reader.h
|
145
|
+
- ext/capn_proto/schema_parser.cc
|
146
|
+
- ext/capn_proto/schema_parser.h
|
147
|
+
- ext/capn_proto/stream_fd_message_reader.cc
|
148
|
+
- ext/capn_proto/stream_fd_message_reader.h
|
149
|
+
- ext/capn_proto/struct_schema.cc
|
150
|
+
- ext/capn_proto/struct_schema.h
|
151
|
+
- ext/capn_proto/util.cc
|
152
|
+
- ext/capn_proto/util.h
|
153
|
+
- lib/capn_proto.rb
|
154
|
+
- lib/capn_proto/version.rb
|
155
|
+
- media/captain_proto.png
|
156
|
+
- media/captain_proto_small.png
|
157
|
+
- spec/addressbook.bin
|
158
|
+
- spec/addressbook.capnp
|
159
|
+
- spec/capn_proto_spec.rb
|
160
|
+
- spec/create_test_data.py
|
161
|
+
homepage: https://github.com/cstrahan/capnp-ruby
|
162
|
+
licenses: []
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
segments:
|
174
|
+
- 0
|
175
|
+
hash: -2889828387253718151
|
176
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>'
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: 1.3.1
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 1.8.23
|
185
|
+
signing_key:
|
186
|
+
specification_version: 3
|
187
|
+
summary: Cap'n Proto (libcapnp) bindings for Ruby.
|
188
|
+
test_files: []
|