M
M
Modélico
Search…
Deep operations: getIn and setIn
Modélico objects support deeply getting values given a path, and deeply setting values given a path and a value.
Using the Animal and Person classes used in the introductory example and the nested types example

getIn

const defaultAnimal = new Animal()
const ownerOfUnnamedPet = new Person({
givenName: 'Javier',
familyName: 'Cejudo',
pets: M.List.of(M.Maybe.of(defaultAnimal))
})
ownerOfUnnamedPet.getIn([
'pets', // String for regular fields
0, // Numbers for M.List
[defaultAnimal, 'name'], // A pair of default and path item for M.Maybe
['Unknown'] // Same as above, but only the default name is
]) // required as we aren't going deeper
// => Unknown
Notice that the path items are strings for regular fields and numbers for M.List. There is another dedicated way for M.Maybe for the case where the value is not present, consisting of an array with two items: the default value, and the path item that applies for the inner type.
This is equivalent to the getIn method above
ownerOfUnnamedPet
.pets()
.get(0)
.getOrElse(defaultAnimal).name()
.getOrElse('Unknown')
// => Unknown

setIn

To set values deeply, a very similar approach is used:
const ownerOfBane = ownerOfUnnamedPet.setIn([
'pets',
0,
[defaultAnimal, 'name']
], 'Bane')
ownerOfBane.getIn([
'pets',
0,
[defaultAnimal, 'name'],
['Unknown']
])
// => Bane
Copy link
Outline
getIn
setIn