package Ġorg . my ddd . vertx . file Ċ Ċ import Ġio . vertx . core . Future Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . kotlin . coroutines . await Ċ import Ġorg . apache . commons . codec . digest . Digest Utils Ċ import Ġorg . my ddd . vertx . ioc . Instance Factory Ċ import Ġjava . io . InputStream Ċ Ċ class ĠFile Digest Provider : File Digest Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvert x Ġby Ġlazy Ġ{ ĠInstance Factory . getInstance ( Vert x :: class . java ) Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdigest ( path : ĠString ): ĠFuture < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexist Ġ= Ġvert x . file System (). exists ( path ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( exist ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= Ġvert x . execute Blocking < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd 5 Ġ= ĠDigest Utils . md 5 Hex ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . complete ( md 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . succeeded Future ( digest ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( t : Throwable ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . failed Future ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdigest ( inputStream : ĠInputStream ): ĠFuture < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= Ġvert x . execute Blocking < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd 5 Ġ= ĠDigest Utils . md 5 Hex ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . complete ( md 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . succeeded Future ( digest ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( t : Throwable ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFuture . failed Future ( t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }