Skip to content

Commit 9a15ea0

Browse files
authored
KTOR-5397 Make @resource annotation @MetaSerializable (#3328)
1 parent d34227f commit 9a15ea0

File tree

8 files changed

+1
-66
lines changed

8 files changed

+1
-66
lines changed

ktor-client/ktor-client-plugins/ktor-client-resources/common/src/io/ktor/client/plugins/resources/Resources.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,11 @@ import io.ktor.resources.Resources as ResourcesCore
1616
*
1717
* Example:
1818
* ```kotlin
19-
* @Serializable
2019
* @Resource("/users")
2120
* data class Users {
22-
* @Serializable
2321
* @Resource("/{id}")
2422
* data class ById(val parent: Users = Users(), val id: Long)
2523
*
26-
* @Serializable
2724
* @Resource("/add")
2825
* data class Add(val parent: Users = Users(), val name: String)
2926
* }

ktor-client/ktor-client-plugins/ktor-client-resources/common/test/ResourcesTest.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@ import kotlin.test.*
1515

1616
class ResourcesTest {
1717

18-
@Serializable
1918
@Resource("path/{id}/{method}")
2019
class Path(val id: Long, val method: String) {
21-
@Serializable
2220
@Resource("child/{path?}")
2321
data class Child(val parent: Path, val path: String, val query: List<Int>)
2422
}
@@ -108,7 +106,6 @@ class ResourcesTest {
108106
}
109107
}
110108

111-
@Serializable
112109
@Resource("path/{id}/{value?}")
113110
class PathWithDefault(val id: Boolean = true, val value: String? = null, val query1: Int?, val query2: Int? = 5)
114111

@@ -131,7 +128,6 @@ class ResourcesTest {
131128
}
132129
}
133130

134-
@Serializable
135131
@Resource("{path}")
136132
class ParametersEncoded(val path: String, val query: String, val queryList: List<String>)
137133

ktor-server/ktor-server-plugins/ktor-server-resources/jvm/test/io/ktor/tests/resources/ResourcesTestJvm.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class ResourcesTestJvm {
3131
}
3232
}
3333

34-
@Serializable
3534
@Resource("/")
3635
class LocationWithBigNumbers(
3736
@Serializable(with = BigDecimalSerializer::class)

ktor-server/ktor-server-plugins/ktor-server-resources/jvmAndNix/src/io/ktor/server/resources/Resources.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@ import io.ktor.resources.Resources as ResourcesCore
1515
*
1616
* Example:
1717
* ```kotlin
18-
* @Serializable
1918
* @Resource("/users")
2019
* data class Users {
21-
* @Serializable
2220
* @Resource("/{id}")
2321
* data class ById(val parent: Users = Users(), val id: Long)
2422
*
25-
* @Serializable
2623
* @Resource("/add")
2724
* data class Add(val parent: Users = Users(), val name: String)
2825
* }

ktor-server/ktor-server-plugins/ktor-server-resources/jvmAndNix/test/io/ktor/tests/resources/ResourcesTest.kt

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ internal fun withResourcesApplication(test: ApplicationTestBuilder.() -> Unit) =
2929
}
3030

3131
class ResourcesTest {
32-
@Serializable
3332
@Resource("/")
3433
class index
3534

@@ -47,7 +46,6 @@ class ResourcesTest {
4746

4847
@Test
4948
fun resourceLocal() {
50-
@Serializable
5149
@Resource("/")
5250
class indexLocal
5351
withResourcesApplication {
@@ -61,7 +59,6 @@ class ResourcesTest {
6159
}
6260
}
6361

64-
@Serializable
6562
@Resource("/about")
6663
class about
6764

@@ -76,7 +73,6 @@ class ResourcesTest {
7673
urlShouldBeUnhandled("/about/123")
7774
}
7875

79-
@Serializable
8076
@Resource("/user/{id}")
8177
class user(val id: Int)
8278

@@ -93,7 +89,6 @@ class ResourcesTest {
9389
urlShouldBeUnhandled("/user?id=123")
9490
}
9591

96-
@Serializable
9792
@Resource("/user/{id}/{name}")
9893
class named(val id: Int, val name: String)
9994

@@ -111,7 +106,6 @@ class ResourcesTest {
111106
urlShouldBeUnhandled("/user/123")
112107
}
113108

114-
@Serializable
115109
@Resource("/favorite")
116110
class favorite(val id: Int)
117111

@@ -128,10 +122,8 @@ class ResourcesTest {
128122
urlShouldBeUnhandled("/favorite")
129123
}
130124

131-
@Serializable
132125
@Resource("/container/{id}")
133126
class pathContainer(val id: Int) {
134-
@Serializable
135127
@Resource("/items")
136128
class items(val container: pathContainer)
137129
}
@@ -150,10 +142,8 @@ class ResourcesTest {
150142
urlShouldBeUnhandled("/container/items?id=123")
151143
}
152144

153-
@Serializable
154145
@Resource("/container")
155146
class queryContainer(val id: Int) {
156-
@Serializable
157147
@Resource("/items")
158148
class items(val container: queryContainer)
159149
}
@@ -172,7 +162,6 @@ class ResourcesTest {
172162
urlShouldBeUnhandled("/container/123/items")
173163
}
174164

175-
@Serializable
176165
@Resource("/container")
177166
class optionalName(val id: Int, val optional: String? = null)
178167

@@ -190,7 +179,6 @@ class ResourcesTest {
190179
urlShouldBeUnhandled("/container/123")
191180
}
192181

193-
@Serializable
194182
@Resource("/container")
195183
class optionalIndex(val id: Int, val optional: Int = 42)
196184

@@ -222,10 +210,8 @@ class ResourcesTest {
222210
urlShouldBeUnhandled("/container/123")
223211
}
224212

225-
@Serializable
226213
@Resource("/container/{id?}")
227214
class optionalContainer(val id: Int? = null) {
228-
@Serializable
229215
@Resource("/items")
230216
class items(val parent: optionalContainer, val optional: String? = null)
231217
}
@@ -250,10 +236,8 @@ class ResourcesTest {
250236
)
251237
}
252238

253-
@Serializable
254239
@Resource("/container")
255240
class simpleContainer {
256-
@Serializable
257241
@Resource("/items")
258242
class items(val parent: simpleContainer)
259243
}
@@ -273,7 +257,6 @@ class ResourcesTest {
273257
urlShouldBeUnhandled("/items")
274258
}
275259

276-
@Serializable
277260
@Resource("/container/{path...}")
278261
class tailCard(val path: List<String>)
279262

@@ -289,11 +272,9 @@ class ResourcesTest {
289272
urlShouldBeHandled(tailCard(listOf("123", "items")), "/container/123/items")
290273
}
291274

292-
@Serializable
293275
@Resource("/")
294276
class multiquery(val value: List<Int>)
295277

296-
@Serializable
297278
@Resource("/")
298279
class multiquery2(val name: List<String>)
299280

@@ -333,7 +314,6 @@ class ResourcesTest {
333314
urlShouldBeHandled(multiquery2(listOf("john, mary")), "2: /?name=john%2C+mary")
334315
}
335316

336-
@Serializable
337317
@Resource("/")
338318
class multiqueryWithDefault(val value: List<Int> = emptyList())
339319

@@ -347,7 +327,6 @@ class ResourcesTest {
347327
urlShouldBeHandled(multiqueryWithDefault(listOf()), "/ []")
348328
}
349329

350-
@Serializable
351330
@Resource("/")
352331
class root
353332

@@ -362,7 +341,6 @@ class ResourcesTest {
362341
urlShouldBeUnhandled("/index")
363342
}
364343

365-
@Serializable
366344
@Resource("/help")
367345
class help
368346

@@ -377,14 +355,11 @@ class ResourcesTest {
377355
urlShouldBeUnhandled("/help/123")
378356
}
379357

380-
@Serializable
381358
@Resource("/users")
382359
class users {
383-
@Serializable
384360
@Resource("/me")
385361
class me(val parent: users)
386362

387-
@Serializable
388363
@Resource("/{id}")
389364
class user(val parent: users, val id: Int)
390365
}
@@ -408,7 +383,6 @@ class ResourcesTest {
408383
urlShouldBeUnhandled("/users/me")
409384
}
410385

411-
@Serializable
412386
@Resource("/items/{id}")
413387
class items
414388

@@ -423,11 +397,9 @@ class ResourcesTest {
423397
}
424398
}
425399

426-
@Serializable
427400
@Resource("/items/{itemId}/{extra?}")
428401
class OverlappingPath1(val itemId: Int, val extra: String?)
429402

430-
@Serializable
431403
@Resource("/items/{extra}")
432404
class OverlappingPath2(val extra: String)
433405

@@ -450,7 +422,6 @@ class ResourcesTest {
450422
A, B, C
451423
}
452424

453-
@Serializable
454425
@Resource("/")
455426
class resourceWithEnum(val e: resourceEnum)
456427

@@ -472,7 +443,6 @@ class ResourcesTest {
472443

473444
@Test
474445
fun resourceParameterMismatchShouldLeadToBadRequestStatus() = withResourcesApplication {
475-
@Serializable
476446
@Resource("/")
477447
data class L(val text: String, val number: Int, val longNumber: Long)
478448

@@ -506,7 +476,6 @@ class ResourcesTest {
506476

507477
@Test
508478
fun resourceWithUInt() = withResourcesApplication {
509-
@Serializable
510479
@Resource("/{id}/{valueParam}")
511480
data class Request(val id: UInt, val query: ULong, val valueParam: ValueClass, val valueQuery: ValueClass)
512481

@@ -522,7 +491,6 @@ class ResourcesTest {
522491
@Test
523492
fun resourceShouldReturnHttpMethodRouteObject() = withResourcesApplication {
524493
@Resource("/resource")
525-
@Serializable
526494
class someResource
527495

528496
routing {

ktor-shared/ktor-resources/common/src/io/ktor/resources/Resource.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import kotlinx.serialization.*
1414
* Other properties are put into the URL query.
1515
* Example:
1616
* ```
17-
* @Serializable
1817
* @Resource("/users/{id}")
1918
* data class UserById(val id: Long, val properties: List<String>)
2019
*
@@ -27,14 +26,11 @@ import kotlinx.serialization.*
2726
* You can nest class for better organization, but all nested classes should have a property with an outer class type.
2827
* Example:
2928
* ```kotlin
30-
* @Serializable
3129
* @Resource("/users")
3230
* data class Users {
33-
* @Serializable
3431
* @Resource("/{id}")
3532
* data class ById(val parent: Users = Users(), val id: Long)
3633
*
37-
* @Serializable
3834
* @Resource("/add")
3935
* data class Add(val parent: Users = Users(), val name: String)
4036
* }
@@ -47,4 +43,5 @@ import kotlinx.serialization.*
4743
@OptIn(ExperimentalSerializationApi::class)
4844
@SerialInfo
4945
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPEALIAS)
46+
@MetaSerializable
5047
public annotation class Resource(val path: String)

ktor-shared/ktor-resources/common/test/io/ktor/tests/resources/PathPatternSerializationTest.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class PathPatternSerializationTest {
1414
private val locationsFormat = ResourcesFormat()
1515

1616
@Resource("some/path/")
17-
@Serializable
1817
class SimplePath
1918

2019
@Test
@@ -24,10 +23,8 @@ class PathPatternSerializationTest {
2423
}
2524

2625
@Resource("parent/{path}")
27-
@Serializable
2826
class NestedClass {
2927
@Resource("{child}/path")
30-
@Serializable
3128
data class ChildClass(val parent: NestedClass)
3229
}
3330

@@ -38,22 +35,17 @@ class PathPatternSerializationTest {
3835
}
3936

4037
@Resource("parent/{path}/")
41-
@Serializable
4238
class NestedClassWithSlash {
4339
@Resource("{child}/path")
44-
@Serializable
4540
data class ChildClassWithSlash(val parent: NestedClass)
4641

4742
@Resource("/{child}/path")
48-
@Serializable
4943
data class ChildClassWithoutSlash(val parent: NestedClass)
5044
}
5145

5246
@Resource("parent/{path}")
53-
@Serializable
5447
class NestedClassWithoutSlash {
5548
@Resource("/{child}/path")
56-
@Serializable
5749
data class ChildClassWithSlash(val parent: NestedClass)
5850
}
5951

@@ -76,13 +68,11 @@ class PathPatternSerializationTest {
7668
}
7769

7870
@Resource("/{child}/path")
79-
@Serializable
8071
data class Container(
8172
val child: MultipleParents
8273
)
8374

8475
@Resource("/{child}/path")
85-
@Serializable
8676
data class MultipleParents(val parent1: NestedClass, val value: String, val parent2: NestedClassWithSlash)
8777

8878
@Test

0 commit comments

Comments
 (0)