Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ornew/protoc-gen-cue
The protoc plugin for CUE language.
https://github.com/ornew/protoc-gen-cue
cue cuelang protobuf protoc-plugin
Last synced: 3 months ago
JSON representation
The protoc plugin for CUE language.
- Host: GitHub
- URL: https://github.com/ornew/protoc-gen-cue
- Owner: ornew
- License: apache-2.0
- Created: 2023-07-15T04:32:23.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-08-12T09:24:46.000Z (about 1 year ago)
- Last Synced: 2024-06-21T20:07:25.295Z (5 months ago)
- Topics: cue, cuelang, protobuf, protoc-plugin
- Language: Go
- Homepage:
- Size: 57.6 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-cue - protoc-gen-cue - The protoc plugin for CUE language. (Projects)
README
# `protoc-gen-cue`
This protoc plugin generates CUE files.
## Conversions
Complies with [protojson](https://protobuf.dev/programming-guides/proto3/#json).
### Basic Types
| Proto Type | CUE Type | Comments |
|-----------------|-------------------------------------|------------------------------------|
| `map` | `{ [string]: V }` | All keys are converted to strings. |
| `repeated V` | `[...V]` | |
| `bool` | `*false \| bool` | |
| `string` | `*"" \| string` | |
| `bytes` | `*'' \| bytes` | |
| `int32` | `*0 \| int32` | |
| `fixed32` | `*0 \| int32` | |
| `uint32` | `*0 \| uint32` | |
| `int64` | `*0 \| int64` | |
| `fixed64` | `*0 \| fixed64` | |
| `uint32` | `*0 \| uint64` | |
| `float` | `*0 \| float32` | |
| `double` | `*0 \| float64` | |
| `Any` | `*null \| { "@type": string, ... }` | |
| `Struct` | `*null \| { [string]: _ }` | |
| `Value` | `*null \| _` | |
| `ListValue` | `*null \| [...]` | |
| `NullValue` | `*null \| null` | |
| `BoolValue` | `*null \| bool` | |
| `StringValue` | `*null \| string` | |
| `Int32Value` | `*null \| int32` | |
| `UInt32Value` | `*null \| uint32` | |
| `Int64Value` | `*null \| int64` | |
| `UInt64Value` | `*null \| uint64` | |
| `FloatValue` | `*null \| float32` | |
| `DoubleValue` | `*null \| double` | |
| `Empty` | `*null \| close({})` | |
| `Timestamp` | `*null \| string` | See the [`Timestamp`](#timestamp) section for more information. |
| `Duration` | `*null \| string` | See the [`Duration`](#duration) section for more information. |
| `FieldMask` | `*null \| string` | |### Message
```proto
import "github.com/ornew/protoc-gen-cue/pkg/options/cue.proto";message Foo {
string name = 1 [(cue.field).expr = '!="xxx"'];
int32 age = 2 [(cue.field).expr = '<100'];
int32 age_next_year = 3 [(cue.field).expr = 'age+1'];
}
```To:
```cue
#Foo: {
name: *"" | string
name: !="xxx"
age: *0 | int32
age: <100
ageNextYear: *0 | int32
ageNextYear: age+1
}
```### Enum
```proto
enum Bar {
ZERO = 0;
ONE = 1;
}
```To:
```cue
#Bar: *#Bar_ZERO | #Bar_ONE#Bar_ZERO: "ZERO"
#Bar_ONE: "ONE"
```### Oneof
```proto
message Car {
oneof id {
string product_name = 1;
int32 serial_number = 2;
}
}
```To:
```cue
#Car: {
_oneof_id: productName & serialNumber
productName?: string
serialNumber?: int32
}
```### Timestamp
Currently defined by an unconstrained `string`. This is due to the fact that CUE's built-in `time.Time` constraint is incompatible with the JSON format defined in the `timestamppb`. We plan to fix this issue in a future version to follow the original format. See for more details: [time.Time on pkg.go.dev](https://pkg.go.dev/cuelang.org/[email protected]/pkg/time#Time) and [timestamppb.Timestamp](https://pkg.go.dev/google.golang.org/[email protected]/types/known/timestamppb#hdr-JSON_Mapping)
### Duration
Currently defined by an unconstrained `string`. This is due to the fact that CUE's built-in `time.Duration` constraint is incompatible with the JSON format defined in the `durationpb`. We plan to fix this issue in a future version to follow the original format. See for more details: [time.Duration in pkg.go.dev](https://pkg.go.dev/cuelang.org/[email protected]/pkg/time#Duration) and [descriptorpb.Duration](https://pkg.go.dev/google.golang.org/protobuf/types/known/durationpb#hdr-JSON_Mapping)
### Optional (proto3)
```proto
message Dog {
optional string nick_name = 1;
}
```To:
```cue
#Dog: {
nickName?: string
}
```