Skip to content

Commit

Permalink
crud: make requests immutable
Browse files Browse the repository at this point in the history
Closes #271
  • Loading branch information
oleg-jukovec committed Mar 15, 2023
1 parent 3a98b2c commit 48f383a
Show file tree
Hide file tree
Showing 20 changed files with 394 additions and 361 deletions.
14 changes: 7 additions & 7 deletions crud/count.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ type countArgs struct {
Opts CountOpts
}

// NewCountRequest returns a new empty CountRequest.
func NewCountRequest(space string) *CountRequest {
req := new(CountRequest)
// MakeCountRequest returns a new empty CountRequest.
func MakeCountRequest(space string) CountRequest {
req := CountRequest{}
req.impl = newCall("crud.count")
req.space = space
req.conditions = nil
Expand All @@ -88,27 +88,27 @@ func NewCountRequest(space string) *CountRequest {

// Conditions sets the conditions for the CountRequest request.
// Note: default value is nil.
func (req *CountRequest) Conditions(conditions []Condition) *CountRequest {
func (req CountRequest) Conditions(conditions []Condition) CountRequest {
req.conditions = conditions
return req
}

// Opts sets the options for the CountRequest request.
// Note: default value is nil.
func (req *CountRequest) Opts(opts CountOpts) *CountRequest {
func (req CountRequest) Opts(opts CountOpts) CountRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *CountRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req CountRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
args := countArgs{Space: req.space, Conditions: req.conditions, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *CountRequest) Context(ctx context.Context) *CountRequest {
func (req CountRequest) Context(ctx context.Context) CountRequest {
req.impl = req.impl.Context(ctx)

return req
Expand Down
18 changes: 10 additions & 8 deletions crud/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,41 @@ type deleteArgs struct {
Opts DeleteOpts
}

// NewDeleteRequest returns a new empty DeleteRequest.
func NewDeleteRequest(space string) *DeleteRequest {
req := new(DeleteRequest)
// MakeDeleteRequest returns a new empty DeleteRequest.
func MakeDeleteRequest(space string) DeleteRequest {
req := DeleteRequest{}
req.impl = newCall("crud.delete")
req.space = space
req.key = []interface{}{}
req.opts = DeleteOpts{}
return req
}

// Key sets the key for the DeleteRequest request.
// Note: default value is nil.
func (req *DeleteRequest) Key(key Tuple) *DeleteRequest {
func (req DeleteRequest) Key(key Tuple) DeleteRequest {
req.key = key
return req
}

// Opts sets the options for the DeleteRequest request.
// Note: default value is nil.
func (req *DeleteRequest) Opts(opts DeleteOpts) *DeleteRequest {
func (req DeleteRequest) Opts(opts DeleteOpts) DeleteRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *DeleteRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req DeleteRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.key == nil {
req.key = []interface{}{}
}
args := deleteArgs{Space: req.space, Key: req.key, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *DeleteRequest) Context(ctx context.Context) *DeleteRequest {
func (req DeleteRequest) Context(ctx context.Context) DeleteRequest {
req.impl = req.impl.Context(ctx)

return req
Expand Down
12 changes: 6 additions & 6 deletions crud/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func exampleConnect() *tarantool.Connection {
// interface{} type.
func ExampleResult_rowsInterface() {
conn := exampleConnect()
req := crud.NewReplaceRequest(exampleSpace).
req := crud.MakeReplaceRequest(exampleSpace).
Tuple([]interface{}{uint(2010), nil, "bla"})

ret := crud.Result{}
Expand All @@ -54,7 +54,7 @@ func ExampleResult_rowsInterface() {
// custom type.
func ExampleResult_rowsCustomType() {
conn := exampleConnect()
req := crud.NewReplaceRequest(exampleSpace).
req := crud.MakeReplaceRequest(exampleSpace).
Tuple([]interface{}{uint(2010), nil, "bla"})

type Tuple struct {
Expand Down Expand Up @@ -82,7 +82,7 @@ func ExampleResult_rowsCustomType() {
// response from *ManyRequest.
func ExampleResult_many() {
conn := exampleConnect()
req := crud.NewReplaceManyRequest(exampleSpace).
req := crud.MakeReplaceManyRequest(exampleSpace).
Tuples([]crud.Tuple{
[]interface{}{uint(2010), nil, "bla"},
[]interface{}{uint(2011), nil, "bla"},
Expand All @@ -105,7 +105,7 @@ func ExampleResult_many() {
// to handle a crud error.
func ExampleResult_error() {
conn := exampleConnect()
req := crud.NewReplaceRequest("not_exist").
req := crud.MakeReplaceRequest("not_exist").
Tuple([]interface{}{uint(2010), nil, "bla"})

ret := crud.Result{}
Expand All @@ -124,13 +124,13 @@ func ExampleResult_error() {
// to handle a crud error for a *ManyRequest.
func ExampleResult_errorMany() {
conn := exampleConnect()
initReq := crud.NewReplaceRequest("not_exist").
initReq := crud.MakeReplaceRequest("not_exist").
Tuple([]interface{}{uint(2010), nil, "bla"})
if _, err := conn.Do(initReq).Get(); err != nil {
fmt.Printf("Failed to initialize the example: %s\n", err)
}

req := crud.NewInsertManyRequest(exampleSpace).
req := crud.MakeInsertManyRequest(exampleSpace).
Tuples([]crud.Tuple{
[]interface{}{uint(2010), nil, "bla"},
[]interface{}{uint(2010), nil, "bla"},
Expand Down
18 changes: 10 additions & 8 deletions crud/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,39 +63,41 @@ type getArgs struct {
Opts GetOpts
}

// NewGetRequest returns a new empty GetRequest.
func NewGetRequest(space string) *GetRequest {
req := new(GetRequest)
// MakeGetRequest returns a new empty GetRequest.
func MakeGetRequest(space string) GetRequest {
req := GetRequest{}
req.impl = newCall("crud.get")
req.space = space
req.key = []interface{}{}
req.opts = GetOpts{}
return req
}

// Key sets the key for the GetRequest request.
// Note: default value is nil.
func (req *GetRequest) Key(key Tuple) *GetRequest {
func (req GetRequest) Key(key Tuple) GetRequest {
req.key = key
return req
}

// Opts sets the options for the GetRequest request.
// Note: default value is nil.
func (req *GetRequest) Opts(opts GetOpts) *GetRequest {
func (req GetRequest) Opts(opts GetOpts) GetRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *GetRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req GetRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.key == nil {
req.key = []interface{}{}
}
args := getArgs{Space: req.space, Key: req.key, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *GetRequest) Context(ctx context.Context) *GetRequest {
func (req GetRequest) Context(ctx context.Context) GetRequest {
req.impl = req.impl.Context(ctx)

return req
Expand Down
36 changes: 20 additions & 16 deletions crud/insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,41 @@ type insertArgs struct {
Opts InsertOpts
}

// NewInsertRequest returns a new empty InsertRequest.
func NewInsertRequest(space string) *InsertRequest {
req := new(InsertRequest)
// MakeInsertRequest returns a new empty InsertRequest.
func MakeInsertRequest(space string) InsertRequest {
req := InsertRequest{}
req.impl = newCall("crud.insert")
req.space = space
req.tuple = []interface{}{}
req.opts = InsertOpts{}
return req
}

// Tuple sets the tuple for the InsertRequest request.
// Note: default value is nil.
func (req *InsertRequest) Tuple(tuple Tuple) *InsertRequest {
func (req InsertRequest) Tuple(tuple Tuple) InsertRequest {
req.tuple = tuple
return req
}

// Opts sets the options for the insert request.
// Note: default value is nil.
func (req *InsertRequest) Opts(opts InsertOpts) *InsertRequest {
func (req InsertRequest) Opts(opts InsertOpts) InsertRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *InsertRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req InsertRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.tuple == nil {
req.tuple = []interface{}{}
}
args := insertArgs{Space: req.space, Tuple: req.tuple, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *InsertRequest) Context(ctx context.Context) *InsertRequest {
func (req InsertRequest) Context(ctx context.Context) InsertRequest {
req.impl = req.impl.Context(ctx)

return req
Expand All @@ -80,39 +82,41 @@ type insertObjectArgs struct {
Opts InsertObjectOpts
}

// NewInsertObjectRequest returns a new empty InsertObjectRequest.
func NewInsertObjectRequest(space string) *InsertObjectRequest {
req := new(InsertObjectRequest)
// MakeInsertObjectRequest returns a new empty InsertObjectRequest.
func MakeInsertObjectRequest(space string) InsertObjectRequest {
req := InsertObjectRequest{}
req.impl = newCall("crud.insert_object")
req.space = space
req.object = MapObject{}
req.opts = InsertObjectOpts{}
return req
}

// Object sets the tuple for the InsertObjectRequest request.
// Note: default value is nil.
func (req *InsertObjectRequest) Object(object Object) *InsertObjectRequest {
func (req InsertObjectRequest) Object(object Object) InsertObjectRequest {
req.object = object
return req
}

// Opts sets the options for the InsertObjectRequest request.
// Note: default value is nil.
func (req *InsertObjectRequest) Opts(opts InsertObjectOpts) *InsertObjectRequest {
func (req InsertObjectRequest) Opts(opts InsertObjectOpts) InsertObjectRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *InsertObjectRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req InsertObjectRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.object == nil {
req.object = MapObject{}
}
args := insertObjectArgs{Space: req.space, Object: req.object, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *InsertObjectRequest) Context(ctx context.Context) *InsertObjectRequest {
func (req InsertObjectRequest) Context(ctx context.Context) InsertObjectRequest {
req.impl = req.impl.Context(ctx)

return req
Expand Down
36 changes: 20 additions & 16 deletions crud/insert_many.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,41 @@ type insertManyArgs struct {
Opts InsertManyOpts
}

// NewInsertManyRequest returns a new empty InsertManyRequest.
func NewInsertManyRequest(space string) *InsertManyRequest {
req := new(InsertManyRequest)
// MakeInsertManyRequest returns a new empty InsertManyRequest.
func MakeInsertManyRequest(space string) InsertManyRequest {
req := InsertManyRequest{}
req.impl = newCall("crud.insert_many")
req.space = space
req.tuples = []Tuple{}
req.opts = InsertManyOpts{}
return req
}

// Tuples sets the tuples for the InsertManyRequest request.
// Note: default value is nil.
func (req *InsertManyRequest) Tuples(tuples []Tuple) *InsertManyRequest {
func (req InsertManyRequest) Tuples(tuples []Tuple) InsertManyRequest {
req.tuples = tuples
return req
}

// Opts sets the options for the InsertManyRequest request.
// Note: default value is nil.
func (req *InsertManyRequest) Opts(opts InsertManyOpts) *InsertManyRequest {
func (req InsertManyRequest) Opts(opts InsertManyOpts) InsertManyRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *InsertManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req InsertManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.tuples == nil {
req.tuples = []Tuple{}
}
args := insertManyArgs{Space: req.space, Tuples: req.tuples, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *InsertManyRequest) Context(ctx context.Context) *InsertManyRequest {
func (req InsertManyRequest) Context(ctx context.Context) InsertManyRequest {
req.impl = req.impl.Context(ctx)

return req
Expand All @@ -80,39 +82,41 @@ type insertObjectManyArgs struct {
Opts InsertObjectManyOpts
}

// NewInsertObjectManyRequest returns a new empty InsertObjectManyRequest.
func NewInsertObjectManyRequest(space string) *InsertObjectManyRequest {
req := new(InsertObjectManyRequest)
// MakeInsertObjectManyRequest returns a new empty InsertObjectManyRequest.
func MakeInsertObjectManyRequest(space string) InsertObjectManyRequest {
req := InsertObjectManyRequest{}
req.impl = newCall("crud.insert_object_many")
req.space = space
req.objects = []Object{}
req.opts = InsertObjectManyOpts{}
return req
}

// Objects sets the objects for the InsertObjectManyRequest request.
// Note: default value is nil.
func (req *InsertObjectManyRequest) Objects(objects []Object) *InsertObjectManyRequest {
func (req InsertObjectManyRequest) Objects(objects []Object) InsertObjectManyRequest {
req.objects = objects
return req
}

// Opts sets the options for the InsertObjectManyRequest request.
// Note: default value is nil.
func (req *InsertObjectManyRequest) Opts(opts InsertObjectManyOpts) *InsertObjectManyRequest {
func (req InsertObjectManyRequest) Opts(opts InsertObjectManyOpts) InsertObjectManyRequest {
req.opts = opts
return req
}

// Body fills an encoder with the call request body.
func (req *InsertObjectManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
func (req InsertObjectManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
if req.objects == nil {
req.objects = []Object{}
}
args := insertObjectManyArgs{Space: req.space, Objects: req.objects, Opts: req.opts}
req.impl = req.impl.Args(args)
return req.impl.Body(res, enc)
}

// Context sets a passed context to CRUD request.
func (req *InsertObjectManyRequest) Context(ctx context.Context) *InsertObjectManyRequest {
func (req InsertObjectManyRequest) Context(ctx context.Context) InsertObjectManyRequest {
req.impl = req.impl.Context(ctx)

return req
Expand Down

0 comments on commit 48f383a

Please sign in to comment.