package Ġcom . ro che . gitlab . api . utils . jackson Ċ Ċ import Ġcom . fasterxml . jackson . core . Json Generator Ċ import Ġcom . fasterxml . jackson . core . Json Parser Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Context Ċ import Ġcom . fasterxml . jackson . databind . Json Deserializer Ċ import Ġcom . fasterxml . jackson . databind . Json Serializer Ċ import Ġcom . fasterxml . jackson . databind . Serializer Provider Ċ import Ġcom . fasterxml . jackson . databind . de ser . std . Std Deserializer Ċ import Ġcom . fasterxml . jackson . databind . ser . std . Std Serializer Ċ import Ġjava . util .* Ċ Ċ object ĠEnum Serialization Ġ{ ĊĊĠĠĠ Ġfun Ġ< E > Ġto Int Serializer ( property Provider : Ġ( E ) Ġ-> ĠOptional < Int >): ĠJsonSerializer < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġgenerator , Ġvalue Ġ-> Ġgenerator . write Number ( value ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E > Ġfrom Int Deserializer ( enum Provider : Ġ( Int ) Ġ-> ĠOptional < E >): ĠJson Deserializer < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Deserializer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠOptional . of Nullable ( it . intValue ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E > ĠtoString Serializer ( property Provider : Ġ( E ) Ġ-> ĠOptional < String >): ĠJsonSerializer < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġgenerator , Ġvalue Ġ-> Ġgenerator . writeString ( value ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< E > Ġfrom String Deserializer ( enum Provider : Ġ( String ) Ġ-> ĠOptional < E >): ĠJson Deserializer < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Deserializer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠOptional . of Nullable ( it . value AsString ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProperty Deserializer < T , ĠE >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvalue Reader : Ġ( Json Parser ) Ġ-> ĠOptional < T >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġenum Provider : Ġ( T ) Ġ-> ĠOptional < E > ĊĠĠĠ Ġ) Ġ: ĠStd Deserializer < E >( Unit :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( p : ĠJson Parser , Ġctxt : ĠDeserial ization Context ): ĠE ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Reader . invoke ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġenum Provider . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProperty Serializer < T , ĠE >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvalue Writer : Ġ( Json Generator , ĠT ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproperty Provider : Ġ( E ) Ġ-> ĠOptional < T > ĊĠĠĠ Ġ) Ġ: ĠStd Serializer < E >( Unit :: class . java , Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( value : ĠE , Ġgen : ĠJson Generator , Ġprovider : ĠSerializer Provider ): ĠUnit Ġ= Ġproperty Provider . invoke ( value ). if Present Ġ{ Ġvalue Writer . invoke ( gen , Ġit ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ