44package software.aws.toolkits.jetbrains.core.notifications
55
66import com.fasterxml.jackson.annotation.JsonProperty
7+ import com.fasterxml.jackson.annotation.JsonSubTypes
8+ import com.fasterxml.jackson.annotation.JsonTypeInfo
9+ import com.fasterxml.jackson.databind.annotation.JsonDeserialize
710
811data class NotificationsList (
912 @JsonProperty(" schema" )
1013 val schema : Schema ,
1114 @JsonProperty(" notifications" )
12- val notifications : List <NotificationData >,
15+ val notifications : List <NotificationData >? ,
1316)
1417
1518data class Schema (
@@ -84,7 +87,7 @@ data class NotificationDisplayCondition(
8487 @JsonProperty(" extension" )
8588 val extension : List <ExtensionType >? ,
8689 @JsonProperty(" authx" )
87- val authx : List <AuthxType >,
90+ val authx : List <AuthxType >? ,
8891)
8992
9093data class ComputeType (
@@ -108,24 +111,95 @@ data class ExtensionType(
108111 val version : NotificationExpression ? ,
109112)
110113
111- open class NotificationExpression
112-
113- open class NotificationOperation : NotificationExpression ()
114-
115- data class NotCondition (
116- @JsonProperty(" not" )
117- val expectedValue : NotificationExpression ,
118- ) : NotificationExpression()
119-
120- data class OrCondition (
121- @JsonProperty(" or" )
122- val expectedValueList : List <NotificationExpression >,
123- ) : NotificationExpression()
124-
125- data class AndCondition (
126- @JsonProperty(" and" )
127- val expectedValueList : List <NotificationExpression >,
128- ) : NotificationExpression()
114+ @JsonTypeInfo(
115+ use = JsonTypeInfo .Id .NAME ,
116+ include = JsonTypeInfo .As .WRAPPER_OBJECT
117+ )
118+ @JsonSubTypes(
119+ JsonSubTypes .Type (value = NotificationExpression .ComparisonCondition ::class , name = " ==" ),
120+ JsonSubTypes .Type (value = NotificationExpression .NotEqualsCondition ::class , name = " !=" ),
121+ JsonSubTypes .Type (value = NotificationExpression .GreaterThanCondition ::class , name = " >" ),
122+ JsonSubTypes .Type (value = NotificationExpression .GreaterThanOrEqualsCondition ::class , name = " >=" ),
123+ JsonSubTypes .Type (value = NotificationExpression .LessThanCondition ::class , name = " <" ),
124+ JsonSubTypes .Type (value = NotificationExpression .LessThanOrEqualsCondition ::class , name = " <=" ),
125+ JsonSubTypes .Type (value = NotificationExpression .AnyOfCondition ::class , name = " anyOf" ),
126+ JsonSubTypes .Type (value = NotificationExpression .NotCondition ::class , name = " not" ),
127+ JsonSubTypes .Type (value = NotificationExpression .OrCondition ::class , name = " or" ),
128+ JsonSubTypes .Type (value = NotificationExpression .AndCondition ::class , name = " and" ),
129+ JsonSubTypes .Type (value = NotificationExpression .NoneOfCondition ::class , name = " noneOf" )
130+ )
131+ sealed class NotificationExpression {
132+ @JsonDeserialize(using = NotConditionDeserializer ::class )
133+ data class NotCondition (
134+ val expectedValue : NotificationExpression ,
135+ ) : NotificationExpression()
136+
137+ @JsonDeserialize(using = OrConditionDeserializer ::class )
138+ data class OrCondition (
139+ val expectedValueList : List <NotificationExpression >,
140+ ) : NotificationExpression()
141+
142+ @JsonDeserialize(using = AndConditionDeserializer ::class )
143+ data class AndCondition (
144+ val expectedValueList : List <NotificationExpression >,
145+ ) : NotificationExpression()
146+
147+ @JsonDeserialize(using = ComplexConditionDeserializer ::class )
148+ data class ComplexCondition (
149+ val expectedValueList : List <NotificationExpression >,
150+ ) : NotificationExpression()
151+
152+ // General class for comparison operators
153+ @JsonDeserialize(using = OperationConditionDeserializer ::class )
154+ data class OperationCondition (
155+ val value : String ,
156+ ) : NotificationExpression()
157+
158+ @JsonDeserialize(using = ComplexOperationConditionDeserializer ::class )
159+ data class ComplexOperationCondition (
160+ val value : List <String >,
161+ ) : NotificationExpression()
162+
163+ @JsonDeserialize(using = ComparisonConditionDeserializer ::class )
164+ data class ComparisonCondition (
165+ val value : String ,
166+ ) : NotificationExpression()
167+
168+ @JsonDeserialize(using = NotEqualsConditionDeserializer ::class )
169+ data class NotEqualsCondition (
170+ val value : String ,
171+ ) : NotificationExpression()
172+
173+ @JsonDeserialize(using = GreaterThanConditionDeserializer ::class )
174+ data class GreaterThanCondition (
175+ val value : String ,
176+ ) : NotificationExpression()
177+
178+ @JsonDeserialize(using = GreaterThanOrEqualsConditionDeserializer ::class )
179+ data class GreaterThanOrEqualsCondition (
180+ val value : String ,
181+ ) : NotificationExpression()
182+
183+ @JsonDeserialize(using = LessThanConditionDeserializer ::class )
184+ data class LessThanCondition (
185+ val value : String ,
186+ ) : NotificationExpression()
187+
188+ @JsonDeserialize(using = LessThanOrEqualsConditionDeserializer ::class )
189+ data class LessThanOrEqualsCondition (
190+ val value : String ,
191+ ) : NotificationExpression()
192+
193+ @JsonDeserialize(using = AnyOfConditionDeserializer ::class )
194+ data class AnyOfCondition (
195+ val value : List <String >,
196+ ) : NotificationExpression()
197+
198+ @JsonDeserialize(using = NoneOfConditionDeserializer ::class )
199+ data class NoneOfCondition (
200+ val value : List <String >,
201+ ) : NotificationExpression()
202+ }
129203
130204data class AuthxType (
131205 @JsonProperty(" feature" )
@@ -139,43 +213,3 @@ data class AuthxType(
139213 @JsonProperty(" ssoscopes" )
140214 val ssoScopes : NotificationExpression ? ,
141215)
142-
143- data class ComparisonCondition (
144- @JsonProperty(" ==" )
145- val expectedValue : String ,
146- ) : NotificationOperation()
147-
148- data class NotEqualsCondition (
149- @JsonProperty(" !=" )
150- val expectedValue : String ,
151- ) : NotificationOperation()
152-
153- data class GreaterThanCondition (
154- @JsonProperty(" >" )
155- val expectedValue : String ,
156- ) : NotificationOperation()
157-
158- data class GreaterThanOrEqualsCondition (
159- @JsonProperty(" >=" )
160- val expectedValue : String ,
161- ) : NotificationOperation()
162-
163- data class LessThanCondition (
164- @JsonProperty(" <" )
165- val expectedValue : String ,
166- ) : NotificationOperation()
167-
168- data class LessThanOrEqualsCondition (
169- @JsonProperty(" <=" )
170- val expectedValue : String ,
171- ) : NotificationOperation()
172-
173- data class InCondition (
174- @JsonProperty(" anyOf" )
175- val expectedValueList : List <String >,
176- ) : NotificationOperation()
177-
178- data class NotInCondition (
179- @JsonProperty(" noneOf" )
180- val expectedValueList : List <String >,
181- ) : NotificationOperation()
0 commit comments