Skip to content

Commit 79b3dac

Browse files
committed
stencil + Clone()
1 parent 541ba51 commit 79b3dac

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

bufarrow.go

+25-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import (
1313
)
1414

1515
type Schema[T proto.Message] struct {
16-
msg *message
16+
msg *message
17+
stencil T
1718
}
1819

1920
func New[T proto.Message](mem memory.Allocator) (schema *Schema[T], err error) {
@@ -33,8 +34,29 @@ func New[T proto.Message](mem memory.Allocator) (schema *Schema[T], err error) {
3334
var a T
3435
b := build(a.ProtoReflect())
3536
b.build(mem)
36-
schema = &Schema[T]{msg: b}
37-
return
37+
schema = &Schema[T]{msg: b, stencil: a}
38+
return schema, err
39+
}
40+
41+
func (s *Schema[T]) Clone(mem memory.Allocator) (schema *Schema[T], err error) {
42+
defer func() {
43+
e := recover()
44+
if e != nil {
45+
switch x := e.(type) {
46+
case error:
47+
err = x
48+
case string:
49+
err = errors.New(x)
50+
default:
51+
panic(x)
52+
}
53+
}
54+
}()
55+
a := s.stencil
56+
b := build(a.ProtoReflect())
57+
b.build(mem)
58+
schema = &Schema[T]{msg: b, stencil: a}
59+
return schema, err
3860
}
3961

4062
// Append appends protobuf value to the schema builder.This method is not safe

0 commit comments

Comments
 (0)