Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding d1 binding to worker_bindings #1446

Merged
merged 7 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/1446.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
worker_bindingsa: add support for `d1` bindings
```
29 changes: 29 additions & 0 deletions workers_bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
WorkerQueueBindingType WorkerBindingType = "queue"
// DispatchNamespaceBindingType is the type for WFP namespace bindings.
DispatchNamespaceBindingType WorkerBindingType = "dispatch_namespace"
// WorkerD1DataseBindingType is for D1 databases

Check failure on line 47 in workers_bindings.go

View workflow job for this annotation

GitHub Actions / lint

Comment should end in a period (godot)
jacobbednarz marked this conversation as resolved.
Show resolved Hide resolved
WorkerD1DataseBindingType WorkerBindingType = "d1"
)

type ListWorkerBindingsParams struct {
Expand Down Expand Up @@ -408,6 +410,28 @@
return meta, nil, nil
}

// WorkerD1DatabaseBinding is a binding to an R2 bucket.
type WorkerD1DatabaseBinding struct {
DatabaseId string
}

// Type returns the type of the binding.
func (b WorkerD1DatabaseBinding) Type() WorkerBindingType {
return WorkerD1DataseBindingType
}

func (b WorkerD1DatabaseBinding) serialize(bindingName string) (workerBindingMeta, workerBindingBodyWriter, error) {
if b.DatabaseId == "" {
return nil, nil, fmt.Errorf(`Database Id for binding "%s" cannot be empty`, bindingName)
}

return workerBindingMeta{
"name": bindingName,
"type": b.Type(),
"database_id": b.DatabaseId,
}, nil, nil
}

// UnsafeBinding is for experimental or deprecated bindings, and allows specifying any binding type or property.
type UnsafeBinding map[string]interface{}

Expand Down Expand Up @@ -529,6 +553,11 @@
bindingListItem.Binding = WorkerAnalyticsEngineBinding{
Dataset: dataset,
}
case WorkerD1DataseBindingType:
database_id := jsonBinding["database_id"].(string)
bindingListItem.Binding = WorkerD1DatabaseBinding{
DatabaseId: database_id,
}
default:
bindingListItem.Binding = WorkerInheritBinding{}
}
Expand Down
11 changes: 10 additions & 1 deletion workers_bindings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func TestListWorkerBindings(t *testing.T) {
assert.NoError(t, err)

assert.Equal(t, successResponse, res.Response)
assert.Equal(t, 8, len(res.BindingList))
assert.Equal(t, 9, len(res.BindingList))

assert.Equal(t, res.BindingList[0], WorkerBindingListItem{
Name: "MY_KV",
Expand Down Expand Up @@ -96,7 +96,16 @@ func TestListWorkerBindings(t *testing.T) {
Dataset: "my_dataset",
},
})

assert.Equal(t, WorkerAnalyticsEngineBindingType, res.BindingList[7].Binding.Type())

assert.Equal(t, res.BindingList[8], WorkerBindingListItem{
Name: "MY_DATABASE",
Binding: WorkerD1DatabaseBinding{
DatabaseId: "cef5331f-e5c7-4c8a-a415-7908ae45f92a",
},
})
assert.Equal(t, WorkerD1DataseBindingType, res.BindingList[8].Binding.Type())
}

func ExampleUnsafeBinding() {
Expand Down
5 changes: 5 additions & 0 deletions workers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ const (
"name": "MY_DATASET",
"type": "analytics_engine",
"dataset": "my_dataset"
},
{
"name": "MY_DATABASE",
"type": "d1",
"database_id": "cef5331f-e5c7-4c8a-a415-7908ae45f92a"
}
],
"success": true,
Expand Down