docs: adds readme

This commit is contained in:
Marvin Preuss 2022-12-13 13:34:46 +00:00
parent c4c26b4028
commit 493cc21d7e
2 changed files with 81 additions and 0 deletions

BIN
README.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

81
README.md Normal file
View File

@ -0,0 +1,81 @@
# protoc-gen-go-value-scan
Implements scanner and valuer interfaces for proto messages.
![README](./README.gif)
## What it does
Takes this proto
```proto
syntax = "proto3";
package foo.v1;
option go_package = "git.wobcom.de/smartmetering/protoc-gen-go-value-scan/test/go/foo/v1;foov1";
message Foo {
string bar = 1;
string zonk = 2;
}
```
and creates this go code
```go
// Code generated by protoc-gen-go-value-scan. DO NOT EDIT.
package foov1
import (
"database/sql/driver"
"fmt"
protojson "google.golang.org/protobuf/encoding/protojson"
)
func (x Foo) Value() (driver.Value, error) {
f := &x
opts := protojson.MarshalOptions{}
opts.UseProtoNames = false
opts.EmitUnpopulated = true
return opts.Marshal(f)
}
func (x *Foo) Scan(value interface{}) error {
switch v := value.(type) {
case []byte:
return protojson.Unmarshal(v, x)
case string:
return protojson.Unmarshal([]byte(v), x)
default:
return fmt.Errorf("type assertion failed")
}
}
```
## Configuration
| Option | Meaning | Default |
| ------------------ | -------------------------------------------------------------------------------------- | ------- |
| `use_proto_names` | UseProtoNames uses proto field name instead of lowerCamelCase name in JSON field names | `true` |
| `emit_unpopulated` | EmitUnpopulated specifies whether to emit unpopulated fields | `true` |
| `exclude` | Takes a message identifier. Can be multiple identifier delimited by `,` | none |
### Example
```yaml
version: v1
plugins:
- name: go
out: go/
opt:
- paths=source_relative
- name: go-value-scan
out: go/
opt:
- paths=source_relative,use_proto_names=false,emit_unpopulated=true,exclude=git.wobcom.de/smartmetering/protoc-gen-go-value-scan/test/go/foo/v1.ExcludeThis
```