https://github.com/typelevel/catapult
https://github.com/typelevel/catapult
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/typelevel/catapult
- Owner: typelevel
- License: apache-2.0
- Created: 2022-10-04T10:03:05.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-07-25T16:09:37.000Z (8 months ago)
- Last Synced: 2025-07-26T08:27:06.975Z (8 months ago)
- Language: Scala
- Homepage: https://typelevel.org/catapult/
- Size: 336 KB
- Stars: 16
- Watchers: 3
- Forks: 6
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Catapult
A thin wrapper for the [Launch Darkly Java server SDK](https://github.com/launchdarkly/java-core) using cats-effect.
```sbt
"org.typelevel" %% "catapult" % "latestVersion"
```
## Usage
### Basic variations
```scala
object Main extends IOApp.Simple {
val sdkKey = "my-sdk-key"
val config: LDConfig = new LDConfig.Builder().build()
val launchDarklyClientResource: Resource[IO, LaunchDarklyClient[IO]] = LaunchDarklyClient.resource[IO](sdkKey, config)
override def run: IO[Unit] = launchDarklyClientResource.use { client =>
for {
// Boolean Variant
bool <- client.boolVariation("BOOL-FLAG", new LDContext("context-name"), defaultValue = false)
_ <- IO.println(s"Boolean Variation: ${bool}")
// String Variant
string <- client.stringVariation("STRING-FLAG", new LDContext("context-name"), defaultValue = "default-string")
_ <- IO.println(s"String Variation: ${string}")
// Integer Variant
int <- client.intVariation("INTEGER-FLAG", new LDContext("context-name"), defaultValue = 0)
_ <- IO.println(s"Integer Variation: ${int}")
// Double Variant
double <- client.doubleVariation("DOUBLE-FLAG", new LDContext("context-name"), defaultValue = 0.00D)
_ <- IO.println(s"Double Variation: ${double}")
// JSON Variant
json <- client.jsonValueVariation("JSON-FLAG", new LDContext("context-name"), defaultValue = LDValue.of("{}"))
_ <- IO.println(s"JSON Variation: ${json}")
} yield ()
}
}
```
### Flush the buffered event queue
Specifies that any buffered events should be sent as soon as possible, rather than waiting for the next flush interval.
The underlying is asynchronous, so events still may not be sent until a later time.
```scala
launchDarklyClientResource.use { client =>
client.flush
}.unsafeRunSync()
```