package Ġcom . pet uk h ov sky . services Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ val ĠobjectMapper Ġ= ĠObjectMapper () ĊĠĠĠĠĠĠĠ Ġ. register Kotlin Module () ĊĊ Ċ inline Ġfun Ġ< re ified ĠT : ĠAny > Ġread JSON ( path : ĠPath ): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠFiles . new InputStream ( path ). use Ġ{ ĊĠĠĠĠĠĠĠ ĠobjectMapper . readValue < T >( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġwrite JSON ( path : ĠPath , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠ Ġreturn ĠFiles . new OutputStream ( path ). use Ġ{ ĊĠĠĠĠĠĠĠ ĠobjectMapper . writeValue ( it , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠJson DAO < T >( val Ġpath : ĠPath , Ġval Ġc : ĠClass < T >) Ġ{ ĊĊĠĠĠ Ġfun Ġexists () Ġ= ĠFiles . exists ( path ) ĊĊĠĠĠ Ġfun Ġread (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! exists ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ ĠFiles . new InputStream ( path ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( it , Ġc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( path . parent ) ĊĠĠĠĠĠĠĠ ĠFiles . new OutputStream ( path ). use Ġ{ ĠobjectMapper . writeValue ( it , Ġvalue ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġjson Dao ( path : ĠPath ) Ġ= ĠJson DAO ( path , ĠT :: class . java )