libcouchbase-mapo 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +38 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +445 -0
  9. data/Rakefile +76 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +19 -0
  12. data/lib/libcouchbase.rb +40 -0
  13. data/lib/libcouchbase/bucket.rb +825 -0
  14. data/lib/libcouchbase/callbacks.rb +69 -0
  15. data/lib/libcouchbase/connection.rb +886 -0
  16. data/lib/libcouchbase/design_docs.rb +92 -0
  17. data/lib/libcouchbase/error.rb +68 -0
  18. data/lib/libcouchbase/ext/libcouchbase.rb +1175 -0
  19. data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
  20. data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
  21. data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
  22. data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
  23. data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
  24. data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
  25. data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
  26. data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
  27. data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
  28. data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
  29. data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
  30. data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
  31. data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +61 -0
  32. data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
  33. data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
  34. data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
  35. data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
  36. data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
  37. data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
  38. data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
  39. data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
  40. data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
  41. data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
  42. data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
  43. data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
  44. data/lib/libcouchbase/ext/libcouchbase/enums.rb +1007 -0
  45. data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
  46. data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
  47. data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
  48. data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
  49. data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
  50. data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
  51. data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
  52. data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
  53. data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
  54. data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
  55. data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
  56. data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
  57. data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
  58. data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
  59. data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
  60. data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
  61. data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
  62. data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
  63. data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
  64. data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
  65. data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
  66. data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
  67. data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
  68. data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
  69. data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
  70. data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
  71. data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +31 -0
  72. data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
  73. data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
  74. data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
  75. data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
  76. data/lib/libcouchbase/ext/libcouchbase_libuv.rb +22 -0
  77. data/lib/libcouchbase/ext/tasks.rb +39 -0
  78. data/lib/libcouchbase/n1ql.rb +78 -0
  79. data/lib/libcouchbase/query_full_text.rb +147 -0
  80. data/lib/libcouchbase/query_n1ql.rb +123 -0
  81. data/lib/libcouchbase/query_view.rb +135 -0
  82. data/lib/libcouchbase/results_fiber.rb +281 -0
  83. data/lib/libcouchbase/results_native.rb +220 -0
  84. data/lib/libcouchbase/subdoc_request.rb +139 -0
  85. data/lib/libcouchbase/version.rb +5 -0
  86. data/libcouchbase.gemspec +68 -0
  87. data/spec/bucket_spec.rb +290 -0
  88. data/spec/connection_spec.rb +257 -0
  89. data/spec/design_docs_spec.rb +31 -0
  90. data/spec/error_spec.rb +26 -0
  91. data/spec/fts_spec.rb +135 -0
  92. data/spec/n1ql_spec.rb +206 -0
  93. data/spec/results_libuv_spec.rb +244 -0
  94. data/spec/results_native_spec.rb +259 -0
  95. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  96. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  97. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  98. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  99. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  100. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  101. data/spec/subdoc_spec.rb +192 -0
  102. data/spec/view_spec.rb +201 -0
  103. data/windows_build.md +36 -0
  104. metadata +265 -0
@@ -0,0 +1,41 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :row ::
20
+ # (String) Current result row. If #rflags has the ::LCB_RESP_F_FINAL bit set, then
21
+ # this field does not contain the actual row, but the remainder of the
22
+ # data not included with the resultset; e.g. the JSON surrounding
23
+ # the "results" field with any errors or metadata for the response.
24
+ # :nrow ::
25
+ # (Integer) Length of the row
26
+ # :htresp ::
27
+ # (RESPHTTP) Raw HTTP response, if applicable
28
+ class RESPN1QL < FFI::Struct
29
+ layout :cookie, :pointer,
30
+ :key, :pointer,
31
+ :nkey, :ulong,
32
+ :cas, :ulong_long,
33
+ :rc, ErrorT,
34
+ :version, :ushort,
35
+ :rflags, :ushort,
36
+ :row, :pointer,
37
+ :nrow, :ulong,
38
+ :htresp, RESPHTTP.by_ref
39
+ end
40
+
41
+ end
@@ -0,0 +1,52 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :vbid ::
20
+ # (Integer) < vBucket ID (for potential mapping)
21
+ # :server_index ::
22
+ # (Integer) < Input server index
23
+ # :cur_uuid ::
24
+ # (Integer) < UUID for this vBucket as known to the server
25
+ # :persisted_seqno ::
26
+ # (Integer) < Highest persisted sequence
27
+ # :mem_seqno ::
28
+ # (Integer) < Highest known sequence
29
+ # :old_uuid ::
30
+ # (Integer) In the case where the command's uuid is not the most current, this
31
+ # contains the last known UUID
32
+ # :old_seqno ::
33
+ # (Integer) If #old_uuid is nonzero, contains the highest sequence number persisted
34
+ # in the #old_uuid snapshot.
35
+ class RESPOBSEQNO < FFI::Struct
36
+ layout :cookie, :pointer,
37
+ :key, :pointer,
38
+ :nkey, :ulong,
39
+ :cas, :ulong_long,
40
+ :rc, ErrorT,
41
+ :version, :ushort,
42
+ :rflags, :ushort,
43
+ :vbid, :ushort,
44
+ :server_index, :ushort,
45
+ :cur_uuid, :ulong_long,
46
+ :persisted_seqno, :ulong_long,
47
+ :mem_seqno, :ulong_long,
48
+ :old_uuid, :ulong_long,
49
+ :old_seqno, :ulong_long
50
+ end
51
+
52
+ end
@@ -0,0 +1,41 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :status ::
20
+ # (Integer) <Bit set of flags
21
+ # :ismaster ::
22
+ # (Integer) < Set to true if this response came from the master node
23
+ # :ttp ::
24
+ # (Integer) <Unused. For internal requests, contains the server index
25
+ # :ttr ::
26
+ # (Integer) <Unused
27
+ class RESPOBSERVE < FFI::Struct
28
+ layout :cookie, :pointer,
29
+ :key, :pointer,
30
+ :nkey, :ulong,
31
+ :cas, :ulong_long,
32
+ :rc, ErrorT,
33
+ :version, :ushort,
34
+ :rflags, :ushort,
35
+ :status, :uchar,
36
+ :ismaster, :uchar,
37
+ :ttp, :uint,
38
+ :ttr, :uint
39
+ end
40
+
41
+ end
@@ -0,0 +1,32 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :server ::
20
+ # (String)
21
+ class RESPSERVERBASE < FFI::Struct
22
+ layout :cookie, :pointer,
23
+ :key, :pointer,
24
+ :nkey, :ulong,
25
+ :cas, :ulong_long,
26
+ :rc, ErrorT,
27
+ :version, :ushort,
28
+ :rflags, :ushort,
29
+ :server, :string
30
+ end
31
+
32
+ end
@@ -0,0 +1,38 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :server ::
20
+ # (String)
21
+ # :value ::
22
+ # (String) < The value, if any, for the given statistic
23
+ # :nvalue ::
24
+ # (Integer) < Length of value
25
+ class RESPSTATS < FFI::Struct
26
+ layout :cookie, :pointer,
27
+ :key, :pointer,
28
+ :nkey, :ulong,
29
+ :cas, :ulong_long,
30
+ :rc, ErrorT,
31
+ :version, :ushort,
32
+ :rflags, :ushort,
33
+ :server, :string,
34
+ :value, :string,
35
+ :nvalue, :ulong
36
+ end
37
+
38
+ end
@@ -0,0 +1,32 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :op ::
20
+ # (StorageT) The type of operation which was performed
21
+ class RESPSTORE < FFI::Struct
22
+ layout :cookie, :pointer,
23
+ :key, :pointer,
24
+ :nkey, :ulong,
25
+ :cas, :ulong_long,
26
+ :rc, ErrorT,
27
+ :version, :ushort,
28
+ :rflags, :ushort,
29
+ :op, StorageT
30
+ end
31
+
32
+ end
@@ -0,0 +1,38 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :dur_resp ::
20
+ # (RESPENDURE) Internal durability response structure. This should never be NULL
21
+ # :store_ok ::
22
+ # (Integer) If the #rc field is not @ref LCB_SUCCESS, this field indicates
23
+ # what failed. If this field is nonzero, then the store operation failed,
24
+ # but the durability checking failed. If this field is zero then the
25
+ # actual storage operation failed.
26
+ class RESPSTOREDUR < FFI::Struct
27
+ layout :cookie, :pointer,
28
+ :key, :pointer,
29
+ :nkey, :ulong,
30
+ :cas, :ulong_long,
31
+ :rc, ErrorT,
32
+ :version, :ushort,
33
+ :rflags, :ushort,
34
+ :dur_resp, RESPENDURE.by_ref,
35
+ :store_ok, :int
36
+ end
37
+
38
+ end
@@ -0,0 +1,35 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :responses ::
20
+ # (FFI::Pointer(*Void))
21
+ # :bufh ::
22
+ # (FFI::Pointer(*Void)) Use with lcb_backbuf_ref/unref
23
+ class RESPSUBDOC < FFI::Struct
24
+ layout :cookie, :pointer,
25
+ :key, :pointer,
26
+ :nkey, :ulong,
27
+ :cas, :ulong_long,
28
+ :rc, ErrorT,
29
+ :version, :ushort,
30
+ :rflags, :ushort,
31
+ :responses, :pointer,
32
+ :bufh, :pointer
33
+ end
34
+
35
+ end
@@ -0,0 +1,67 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :cookie ::
6
+ # (FFI::Pointer(*Void))
7
+ # :key ::
8
+ # (FFI::Pointer(*Void))
9
+ # :nkey ::
10
+ # (Integer)
11
+ # :cas ::
12
+ # (Integer)
13
+ # :rc ::
14
+ # (ErrorT)
15
+ # :version ::
16
+ # (Integer)
17
+ # :rflags ::
18
+ # (Integer)
19
+ # :docid ::
20
+ # (String) < Document ID (i.e. memcached key) associated with this row
21
+ # :ndocid ::
22
+ # (Integer) < Length of document ID
23
+ # :value ::
24
+ # (String) Emitted value. If `rflags & LCB_RESP_F_FINAL` is true then this will
25
+ # contain the _metadata_ of the view response itself. This includes the
26
+ # `total_rows` field among other things, and should be parsed as JSON
27
+ # :nvalue ::
28
+ # (Integer) < Length of emitted value
29
+ # :geometry ::
30
+ # (String) If this is a spatial view, the GeoJSON geometry fields will be here
31
+ # :ngeometry ::
32
+ # (Integer)
33
+ # :htresp ::
34
+ # (RESPHTTP) If the request failed, this will contain the raw underlying request.
35
+ # You may inspect this request and perform some other processing on
36
+ # the underlying HTTP data. Note that this may not necessarily contain
37
+ # the entire response body; just the chunk at which processing failed.
38
+ # :docresp ::
39
+ # (RESPGET) If @ref LCB_CMDVIEWQUERY_F_INCLUDE_DOCS was specified in the request,
40
+ # this will contain the response for the _GET_ command. This is the same
41
+ # response as would be received in the `LCB_CALLBACK_GET` for
42
+ # lcb_get3().
43
+ #
44
+ # Note that this field should be checked for various errors as well, as it
45
+ # is remotely possible the get request did not succeed.
46
+ #
47
+ # If the @ref LCB_CMDVIEWQUERY_F_INCLUDE_DOCS flag was not specified, this
48
+ # field will be `NULL`.
49
+ class RESPVIEWQUERY < FFI::Struct
50
+ layout :cookie, :pointer,
51
+ :key, :pointer,
52
+ :nkey, :ulong,
53
+ :cas, :ulong_long,
54
+ :rc, ErrorT,
55
+ :version, :ushort,
56
+ :rflags, :ushort,
57
+ :docid, :pointer,
58
+ :ndocid, :ulong,
59
+ :value, :pointer,
60
+ :nvalue, :ulong,
61
+ :geometry, :pointer,
62
+ :ngeometry, :ulong,
63
+ :htresp, RESPHTTP.by_ref,
64
+ :docresp, RESPGET.by_ref
65
+ end
66
+
67
+ end
@@ -0,0 +1,22 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :value ::
6
+ # (FFI::Pointer(*Void)) Value for the mutation (only applicable for ::LCB_SUBDOC_COUNTER, currently)
7
+ # :nvalue ::
8
+ # (Integer) Length of the value
9
+ # :status ::
10
+ # (ErrorT) Status code
11
+ # :index ::
12
+ # (Integer) Request index which this result pertains to. This field only
13
+ # makes sense for multi mutations where not all request specs are returned
14
+ # in the result
15
+ class SDENTRY < FFI::Struct
16
+ layout :value, :pointer,
17
+ :nvalue, :ulong,
18
+ :status, ErrorT,
19
+ :index, :uchar
20
+ end
21
+
22
+ end
@@ -0,0 +1,31 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ #
4
+ # ## Fields:
5
+ # :sdcmd ::
6
+ # (Integer) The command code, @ref lcb_SUBDOCOP. There is no default for this
7
+ # value, and it therefore must be set.
8
+ # :options ::
9
+ # (Integer) Set of option flags for the command. Currently the only option known
10
+ # is @ref LCB_SDSPEC_F_MKINTERMEDIATES
11
+ # :path ::
12
+ # (KEYBUF) Path for the operation. This should be assigned using
13
+ # @ref LCB_SDSPEC_SET_PATH. The contents of the path should be valid
14
+ # until the operation is scheduled (lcb_subdoc3())
15
+ # :value ::
16
+ # (VALBUF) @value for the operation. This should be assigned using
17
+ # @ref LCB_SDSPEC_SET_VALUE. The contents of the value should be valid
18
+ # until the operation is scheduled (i.e. lcb_subdoc3())
19
+ class SDSPEC < FFI::Struct
20
+ MKINTERMEDIATES = (1<<16) # Create intermediate paths
21
+ XATTRPATH = (1<<18) # Access document XATTR path
22
+ XATTR_MACROVALUES = (1<<19) # Access document virtual/materialized path
23
+ XATTR_DELETED_OK = (1<<20) # Access Xattrs of deleted documents
24
+
25
+ layout :sdcmd, :uint,
26
+ :options, :uint,
27
+ :path, KEYBUF.by_value,
28
+ :value, VALBUF.by_value
29
+ end
30
+
31
+ end
@@ -0,0 +1,7 @@
1
+ module Libcouchbase::Ext
2
+ # (Not documented)
3
+ class T < FFI::Struct
4
+ layout :dummy, :char
5
+ end
6
+
7
+ end