WIP: Specify K2V with Smithy #538
3 changed files with 134 additions and 0 deletions
30
build.gradle.kts
Normal file
30
build.gradle.kts
Normal file
|
@ -0,0 +1,30 @@
|
|||
plugins {
|
||||
id("software.amazon.smithy").version("0.6.0")
|
||||
}
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
|
||||
// This dependency is required in order to apply the "openapi"
|
||||
// plugin in smithy-build.json
|
||||
classpath("software.amazon.smithy:smithy-openapi:1.29.0")
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("software.amazon.smithy:smithy-model:1.29.0")
|
||||
implementation("software.amazon.smithy:smithy-aws-traits:1.29.0")
|
||||
}
|
||||
|
||||
configure<software.amazon.smithy.gradle.SmithyExtension> {
|
||||
// Uncomment this to use a custom projection when building the JAR.
|
||||
// projection = "foo"
|
||||
}
|
||||
|
||||
// Uncomment to disable creating a JAR.
|
||||
//tasks["jar"].enabled = false
|
96
model/k2v.smithy
Normal file
96
model/k2v.smithy
Normal file
|
@ -0,0 +1,96 @@
|
|||
$version: "2"
|
||||
namespace org.deuxfleurs.garage.k2v
|
||||
|
||||
use aws.api#service
|
||||
use aws.auth#sigv4
|
||||
use aws.protocols#restJson1
|
||||
|
||||
@service(sdkId: "k2v")
|
||||
@sigv4(name: "k2v")
|
||||
@restJson1
|
||||
service K2V {
|
||||
version: "2023-04-10"
|
||||
resources: [ Item ]
|
||||
//operations: [ PollItem, ReadIndex, InsertBatch, DeleteBatch, PollRange ]
|
||||
}
|
||||
|
||||
resource Item {
|
||||
read: ReadItem
|
||||
put: InsertItem
|
||||
//delete: DeleteItem
|
||||
//list: ReadBatch
|
||||
}
|
||||
|
||||
@mixin
|
||||
structure KeySelector {
|
||||
@required
|
||||
@httpLabel
|
||||
bucketName: String
|
||||
|
||||
@required
|
||||
@httpLabel
|
||||
partitionKey: String
|
||||
|
||||
@required
|
||||
@httpQuery("sort_key")
|
||||
sortKey: String
|
||||
}
|
||||
|
||||
@readonly
|
||||
@http(method: "GET", uri: "/{bucketName}/{partitionKey}", code: 200)
|
||||
operation ReadItem {
|
||||
input: ReadItemInput
|
||||
output: ReadItemOutput
|
||||
}
|
||||
|
||||
@input
|
||||
structure ReadItemInput with [KeySelector] {}
|
||||
|
||||
@output
|
||||
structure ReadItemOutput {
|
||||
value: ItemList
|
||||
}
|
||||
|
||||
@sparse
|
||||
list ItemList {
|
||||
member: Blob
|
||||
}
|
||||
|
||||
@idempotent
|
||||
@http(method: "PUT", uri: "/{bucketName}/{partitionKey}", code: 204)
|
||||
operation InsertItem {
|
||||
input: InsertItemInput
|
||||
}
|
||||
|
||||
@input
|
||||
structure InsertItemInput with [KeySelector] {}
|
||||
|
||||
//operation DeleteItem {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
||||
|
||||
//operation PollItem {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
||||
|
||||
//operation ReadIndex {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
||||
|
||||
//operation InsertBatch {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
||||
|
||||
//operation DeleteBatch {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
||||
|
||||
//operation PollRange {
|
||||
// input: String
|
||||
// output: String
|
||||
//}
|
8
smithy-build.json
Normal file
8
smithy-build.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"plugins": {
|
||||
"openapi": {
|
||||
"service": "org.deuxfleurs.garage.k2v#K2V"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue