package Ġopen food facts . github . scr ach x . open food . utils Ċ Ċ import Ġopen food facts . github . scr ach x . open food . models . Measurement Unit Ċ import Ġopen food facts . github . scr ach x . open food . models . Measurement Unit .* Ċ import Ġopen food facts . github . scr ach x . open food . models . Modifier Ċ import Ġopen food facts . github . scr ach x . open food . models . if Not Default ĊĊ Ċ data Ġclass ĠMeasurement ( ĊĠĠĠ Ġval Ġvalue : ĠFloat , ĊĠĠĠ Ġval Ġunit : ĠMeasurement Unit Ċ ) Ċ Ċ fun Ġmeasure ( value : ĠFloat , Ġunit : ĠMeasurement Unit ) Ġ= ĠMeasurement ( value , Ġunit ) Ċ Ċ fun ĠMeasurement . for Port ion ( portion : ĠMeasurement ) Ġ= ĠMeasurement ( ĊĠĠĠ Ġvalue Ġ= Ġvalue Ġ/ Ġ 1 0 0 Ġ* Ġportion . grams . value , ĊĠĠĠ Ġunit Ġ= Ġthis . unit Ċ ) ĊĊ Ċ /** Ċ Ġ* ĠConverts Ġa Ġgiven Ġmeasurement Ġto Ġgr ams . Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġthe Ġmeasurement Ġto Ġconvert . Ċ Ġ* Ġ@ return Ġthe Ġconverted Ġmeasurement . Ċ Ġ*/ Ċ fun ĠMeasurement . convertTo Gr ams () Ġ= ĠMeasurement ( ĊĠĠĠ Ġwhen Ġ( unit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUNIT _ M ILL IG RAM Ġ-> Ġvalue Ġ/ Ġ 1 e 3 f ĊĠĠĠĠĠĠĠ ĠUNIT _ MICRO GRAM Ġ-> Ġvalue Ġ/ Ġ 1 e 6 f ĊĠĠĠĠĠĠĠ ĠUNIT _ KI LOG RAM , ĠUNIT _ L ITER Ġ-> Ġvalue Ġ* Ġ 1 e 3 f ĊĠĠĠĠĠĠĠ ĠUNIT _ DEC IL IT RE Ġ-> Ġvalue Ġ* Ġ 1 e 2 f ĊĠĠĠĠĠĠĠ ĠUNIT _ CENT IL IT RE Ġ-> Ġvalue Ġ* Ġ 1 0 f ĊĠĠĠĠĠĠĠ ĠUNIT _ MIL LIL IT RE , ĠUNIT _ GRAM Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ ĠUNIT _ O Z Ġ-> Ġvalue Ġ/ ĠO Z _ PER _ L Ġ* Ġ 1 e 3 f ĊĠĠĠĠĠĠĠ Ġ// TODO Ġ: Ġwhat Ġabout Ġ% ĠDV Ġand ĠI U ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ}, ĠUNIT _ GRAM Ċ ) Ċ Ċ private Ġconst Ġval ĠK J _ PER _ K CAL Ġ= Ġ 4 . 1 8 4 f Ċ private Ġconst Ġval ĠS ALT _ PER _ SO DI UM Ġ= Ġ 2 . 5 4 f Ċ private Ġconst Ġval ĠO Z _ PER _ L Ġ= Ġ 3 3 . 8 1 4 f Ċ Ċ val ĠMeasurement . grams Ġget () Ġ= ĠconvertTo Gr ams () Ċ Ċ fun ĠMeasurement . convert Energy To ( target Unit : ĠMeasurement Unit ): ĠMeasurement Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġunit Ġ== Ġtarget Unit Ġ-> Ġthis ĊĠĠĠ Ġunit Ġ== ĠEN ER GY _ KJ Ġ&& Ġtarget Unit Ġ== ĠEN ER GY _ K CAL Ġ-> ĠMeasurement ( value Ġ/ ĠK J _ PER _ K CAL , Ġtarget Unit ) ĊĠĠĠ Ġunit Ġ== ĠEN ER GY _ K CAL Ġ&& Ġtarget Unit Ġ== ĠEN ER GY _ KJ Ġ-> ĠMeasurement ( value Ġ* ĠK J _ PER _ K CAL , Ġtarget Unit ) ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Cannot Ġconvert Ġfrom / to ĠNON Ġenergy . ĠUse ĠconvertTo Ġinstead .") Ċ } Ċ Ċ fun ĠMeasurement . convertTo ( unit : ĠMeasurement Unit ): ĠMeasurement Ġ{ ĊĠĠĠ Ġ// ĠFirst Ġconvert Ġto Ġgr ams / ml ĊĠĠĠ Ġval Ġvalue Ġ= Ġgr ams . value ĊĊĠĠĠ Ġ// ĠThen Ġto Ġdesired Ġunit ĊĠĠĠ Ġreturn ĠMeasurement ( ĊĠĠĠĠĠĠĠ Ġwhen Ġ( unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEN ER GY _ KJ , ĠEN ER GY _ K CAL Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Cannot Ġconvert Ġfrom / to Ġenergy . ĠUse Ġconvert Energy To Ġinstead .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ DV , ĠUNIT _ IU Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Cannot Ġconvert Ġto ĠDV Ġor ĠI U ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ O Z Ġ-> Ġvalue Ġ/ Ġ 1 e 3 f Ġ* ĠO Z _ PER _ L ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ MICRO GRAM Ġ-> Ġvalue Ġ* Ġ 1 e 6 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ M ILL IG RAM Ġ-> Ġvalue Ġ* Ġ 1 e 3 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ GRAM , ĠUNIT _ MIL LIL IT RE Ġ-> Ġvalue Ġ// Ġ 1 g Ġof Ġwater Ġ== Ġ 1 ml ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ CENT IL IT RE Ġ-> Ġvalue Ġ/ Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ DEC IL IT RE Ġ-> Ġvalue Ġ/ Ġ 1 e 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUNIT _ KI LOG RAM , ĠUNIT _ L ITER Ġ-> Ġvalue Ġ/ Ġ 1 e 3 f ĊĠĠĠĠĠĠĠ Ġ}, Ġunit ĊĠĠĠ Ġ) Ċ } ĊĊ Ċ fun ĠMeasurement . to Display String ( modifier : ĠModifier ? Ġ= Ġnull ): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠ Ġmodifier ?. if Not Default Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( it . sym ) ĊĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġappend ( get Round Number ( value )) ĊĠĠĠ Ġappend (" Ġ") ĊĠĠĠ Ġappend ( unit . sym ) Ċ } Ċ Ċ fun ĠFloat . salt ToS odium () Ġ= Ġthis Ġ/ ĠS ALT _ PER _ SO DI UM Ċ fun ĠFloat . s odium ToS alt () Ġ= Ġthis Ġ* ĠS ALT _ PER _ SO DI UM Ċ Ċ fun ĠMeasurement . salt ToS odium () Ġ= ĠMeasurement ( value . salt ToS odium (), Ġunit ) Ċ fun ĠMeasurement . s odium ToS alt () Ġ= ĠMeasurement ( value . s odium ToS alt (), Ġunit ) Ċ Ċ private Ġval ĠSIZE _ REGEX Ġ= ĠRegex ("( \\ d + [ ., ]? \\ d *) \\ s * ([ A - z ]+ )? ") Ċ Ċ fun Ġget Ser ving In ( serving Size : ĠString , Ġunit : ĠMeasurement Unit ): ĠMeasurement ? Ġ{ ĊĠĠĠ Ġval Ġmatch Ġ= ĠSIZE _ REGEX . find ( serving Size ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġvalue Ġ= Ġmatch . group Values [ 1 ]. toFloat () ĊĠĠĠ Ġval Ġserving Unit Ġ= Ġmatch . group Values [ 2 ]. let Ġ{ ĠComp anion . findBy Symbol ( it ) Ġ} Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġmeasurement Ġ= ĠMeasurement ( value , Ġserving Unit ) ĊĠĠĠ Ġreturn Ġmeasurement . convertTo ( unit ) Ċ } Ċ Ċ fun Ġparse Ser ving ( serving Size : ĠString ): ĠPair < String , ĠMeasurement Unit ?> Ġ{ ĊĠĠĠ Ġval Ġmatch Ġ= ĠSIZE _ REGEX . find ( serving Size ) ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġparse Ġserving Ġsize Ġ'$ serving Size '") ĊĊĠĠĠ Ġval Ġvalue Ġ= Ġmatch . group Values [ 1 ] ĊĠĠĠ Ġval Ġunit Ġ= Ġmatch . group Values [ 2 ]. let Ġ{ ĠComp anion . findBy Symbol ( it ) Ġ} ĊĊĠĠĠ Ġreturn Ġvalue Ġto Ġunit Ċ } Ċ Ċ fun Ġget Ser ving In Oz ( serving Size : ĠString ) Ġ= Ġget Ser ving In ( serving Size , ĠUNIT _ O Z ) Ċ fun Ġget Ser ving In L ( serving Size : ĠString ) Ġ= Ġget Ser ving In ( serving Size , ĠUNIT _ L ITER ) Ċ