Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
bastianeicher committed Jul 7, 2024
0 parents commit 735f7ad
Show file tree
Hide file tree
Showing 104 changed files with 4,554 additions and 0 deletions.
124 changes: 124 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
insert_final_newline = true
keep_existing_linebreaks = true
max_line_length = off

[*.{json,xml,yml,yaml,htm,html,js,ts,css,scss,less}]
indent_size = 2

[*.{*proj,resx,config,ruleset,cd,props,targets,nuspec}]
end_of_line = crlf
indent_size = 2

[*.{txt,cs,ps1,psd1,manifest}]
end_of_line = crlf

[*.{bat,cmd}]
charset = latin1
end_of_line = crlf

[*.sln]
end_of_line = crlf
indent_style = tab

[*.{md,resx,Designer.*}]
trim_trailing_whitespace = false

[*.cs]
# Indentation
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_outdent_binary_ops = true
csharp_outdent_dots = true
csharp_align_linq_query = true
csharp_align_multiline_parameter = true
csharp_align_multiline_calls_chain = true
csharp_align_multiline_binary_expressions_chain = true
csharp_align_multiline_array_and_object_initializer = false

# Line breaks
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = false
csharp_new_line_before_open_brace = all
csharp_blank_lines_around_single_line_field = 0
csharp_blank_lines_inside_region = 0
csharp_blank_lines_around_region = 0
csharp_blank_lines_after_block_statements = 0
csharp_empty_block_style = together
csharp_place_simple_blocks_on_single_line = true
csharp_place_simple_initializer_on_single_line = true
csharp_place_attribute_on_same_line = if_owner_is_single_line
csharp_place_expr_method_on_single_line = true
csharp_place_constructor_initializer_on_same_line = false
csharp_wrap_object_and_collection_initializer_style = chop_if_long
csharp_wrap_array_initializer_style = chop_if_long
csharp_wrap_parameters_style = chop_if_long
csharp_preserve_single_line_blocks = true
csharp_keep_existing_arrangement = true

# Spacing
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_before_open_square_brackets = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_square_brackets = false
csharp_space_within_empty_braces = false

# Style
csharp_parentheses_redundancy_style = remove_if_not_clarifies_precedence
csharp_allow_comment_after_lbrace = true
csharp_braces_for_ifelse = required_for_multiline
csharp_braces_for_for = required_for_multiline
csharp_braces_for_foreach = required_for_multiline
csharp_braces_for_while = required_for_multiline
csharp_braces_for_using = required_for_multiline
csharp_braces_for_lock = required_for_multiline
csharp_braces_for_fixed = required_for_multiline
csharp_style_var_for_built_in_types = false
csharp_style_var_when_type_is_apparent = true
csharp_style_expression_bodied_constructors = false
csharp_style_expression_bodied_accessors = true
csharp_style_expression_bodied_methods = true
csharp_style_expression_bodied_properties = true
csharp_local_function_body = expression_body
csharp_style_qualification_for_event = false
csharp_style_qualification_for_field = false
csharp_style_qualification_for_method = false
csharp_style_qualification_for_property = false
csharp_style_pattern_matching_over_as_with_null_check = true
csharp_style_pattern_matching_over_is_with_cast_check = true
csharp_style_object_initializer = true
csharp_style_collection_initializer = true
csharp_style_explicit_tuple_names = true
csharp_style_null_propagation = true
csharp_style_coalesce_expression = true
csharp_style_conditional_delegate_call = true
csharp_style_throw_expression = true
csharp_style_predefined_type_for_locals_parameters_members = true
csharp_style_predefined_type_for_member_access = true
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Disable linebreak normalization
* -text
62 changes: 62 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Build
on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
steps:
# Prepare
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: gittools/actions/gitversion/[email protected]
with:
versionSpec: '5.12.x'
- uses: gittools/actions/gitversion/[email protected]
id: gitversion
- name: Set version (release)
if: github.ref_type == 'tag'
run: echo "VERSION=${{steps.gitversion.outputs.semVer}}" >> $GITHUB_ENV
- name: Set version (pre-release)
if: github.ref_type != 'tag'
run: echo "VERSION=${{steps.gitversion.outputs.semVer}}-${{steps.gitversion.outputs.shortSha}}" >> $GITHUB_ENV

# Build
- run: gradle build
- run: gradle dokkaHtml
- run: gradle test
- name: Report test results
if: always()
uses: dorny/test-reporter@v1
with:
name: Test Report
reporter: java-junit
path: '*/build/test-results/test/TEST-*.xml'

# Release
- name: Create GitHub Release
if: github.ref_type == 'tag'
uses: softprops/action-gh-release@v1

# Publish
# - name: Publish packages (GitHub)
# if: github.event_name == 'push' && !startsWith(github.ref_name, 'renovate/')
# run: gradle publishMavenPublicationToGitHubRepository
# env:
# GITHUB_TOKEN: ${{github.token}}
# - name: Publish packages (Maven Central)
# if: github.ref_type == 'tag'
# run: gradle publishToSonatype closeAndReleaseSonatypeStagingRepository
# env:
# SIGNING_KEY: ${{secrets.SIGNING_KEY}}
# SIGNING_PASSWORD: ${{secrets.SIGNING_PASSWORD}}
# SONATYPE_USERNAME: ${{secrets.SONATYPE_USERNAME}}
# SONATYPE_PASSWORD: ${{secrets.SONATYPE_PASSWORD}}
- name: Publish documentation
if: github.ref_type == 'tag'
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{github.token}}
force_orphan: true
publish_dir: build/dokka/html
cname: java.typedrest.net
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*/build/
/.gradle/
/.idea/
/.kotlin

15 changes: 15 additions & 0 deletions GitVersion.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
mode: ContinuousDeployment

branches:
# Mainline branches
develop:
tag: alpha
increment: patch
master:
tag: beta

# Stabilization branches
release:
tag: rc
hotfix:
tag: rc
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
The MIT License (MIT)

Copyright (c) 2021 Bastian Eicher

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
72 changes: 72 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# ![TypedRest](logo.svg) for Java/Kotlin

TypedRest for Java/Kotlin helps you build type-safe, fluent-style REST API clients. Common REST patterns such as collections are represented as classes, allowing you to write more idiomatic code.

**Java**

```java
MyClient client = new MyClient(URI.create("http://example.com/"));

// GET /contacts
List<Contact> contactList = client.getContacts().readAll();

// POST /contacts -> Location: /contacts/1337
ContactEndpoint smith = client.getContacts().create(new Contact("Smith"));
//ContactEndpoint smith = client.getContacts().get("1337");

// GET /contacts/1337
Contact contact = smith.read();

// PUT /contacts/1337/note
smith.getNote().set(new Note("some note"));

// GET /contacts/1337/note
Note note = smith.getNote().read();

// DELETE /contacts/1337
smith.delete();
```

**Kotlin**

```kotlin
val client = MyClient(URI("http://example.com/"))

// GET /contacts
val contactList: List<Contact> = client.contacts.readAll()

// POST /contacts -> Location: /contacts/1337
val smith: ContactEndpoint = client.contacts.create(Contact("Smith"))
//val smith: ContactEndpoint = client.contacts["1337"]

// GET /contacts/1337
val contact: Contact = smith.read()

// PUT /contacts/1337/note
smith.note.set(Note("some note"))

// GET /contacts/1337/note
val note: Note = smith.note.read()

// DELETE /contacts/1337
smith.delete()
```

Read an **[Introduction](https://typedrest.net/introduction/)** to TypedRest or jump right in with the **[Getting started](https://typedrest.net/getting-started/java/)** guide.

For information about specific classes or interfaces you can read the **[API Documentation](https://java.typedrest.net/)**.

## Maven artifacts

Artifact group: [`net.typedrest`](https://mvnrepository.com/artifact/net.typedrest)

[![typedrest](https://img.shields.io/maven-central/v/net.typedrest/typedrest.svg?label=typedrest)](https://mvnrepository.com/artifact/net.typedrest/typedrest)
The main TypedRest library.

[![typedrest-serializers-jackson](https://img.shields.io/maven-central/v/net.typedrest/typedrest-serializers-jackson.svg?label=typedrest-serializers-jackson)](https://mvnrepository.com/artifact/net.typedrest/typedrest-serializers-jackson)
Adds support for serializing using [Jackson](https://github.com/FasterXML/jackson) instead of [kotlinx.serialization](https://kotlinlang.org/docs/serialization.html).
Pass `new JacksonJsonSerializer()` to the `EntryEndpoint` constructor.

[![typedrest-serializers-moshi](https://img.shields.io/maven-central/v/net.typedrest/typedrest-serializers-moshi.svg?label=typedrest-serializers-moshi)](https://mvnrepository.com/artifact/net.typedrest/typedrest-serializers-moshi)
Adds support for serializing using [Moshi](https://github.com/square/moshi) instead of [kotlinx.serialization](https://kotlinlang.org/docs/serialization.html).
Pass `new MoshiJsonSerializer()` to the `EntryEndpoint` constructor.
17 changes: 17 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
plugins {
kotlin("jvm") version "2.0.0" apply false
kotlin("plugin.serialization") version "2.0.0" apply false
id("org.jetbrains.dokka") version "1.9.20" apply false
}

subprojects {
fun kotlin(module: String) = "org.jetbrains.kotlin.${module}"
apply(plugin = kotlin("jvm"))
apply(plugin = kotlin("plugin.serialization"))
apply(plugin = "org.jetbrains.dokka")

repositories.mavenCentral()

group = "net.typedrest"
version = System.getenv("VERSION") ?: "1.0-SNAPSHOT"
}
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
kotlin.code.style=official
16 changes: 16 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[versions]
okhttp3 = "4.12.0"
uri-templates = "2.1.7"
kotlinx-serialization = "1.7.0"
jackson = "2.17.1"
moshi = "1.15.1"

[libraries]
okhttp3 = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp3" }
okhttp3-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp3" }
uri-templates = { module = "com.damnhandy:handy-uri-templates", version.ref = "uri-templates" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
jackson-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" }
moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi" }
moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" }
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 735f7ad

Please sign in to comment.