famedly / uia-proxy

GNU Affero General Public License v3.0
0 stars 0 forks source link

refactor: Redefine UsernameMapperEntry with io-ts - [merged] #134

Closed famedly-bot closed 1 year ago

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 20, 2022, 16:59

Merges agraven/usermapper-io-ts -> main

This is an alternative take on !92 that uses the io-ts package to achieve type safe deserialization instead of the more manual approach.

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 20, 2022, 16:59

requested review from @jbecker, @kate-shine, @ghost, @jakibaki, @ghost, @ghost, @jcgruenhage, and @jdreichmann

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 21, 2022, 07:38

added 1 commit

Compare with previous version

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 21, 2022, 09:30

added 1 commit

Compare with previous version

famedly-bot commented 1 year ago

In GitLab by @ghost on Dec 22, 2022, 07:58

Commented on src/usernamemapper.ts line 111

This one feels a bit rusty, maybe maintainability might be increased by using a more TypeScript-y implementation here?

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 22, 2022, 14:28

Commented on src/usernamemapper.ts line 111

The alternative approaches would be either the "fp-ts way" using its pipe utility for chaining functions

return pipe(
    // parse the JSON
    Json.decode(entry.toString()),
    // Deserialize it to a UsernameMapperEntry
    E.chain((obj) => UsernameMapperEntry.decode(obj)),
    // Eval to null if any errors occurred
    E.getOrElseW(() => null),
)

Or to copy-paste fp.ts's definition in place, which feels needlessly wordy to me:

const parsed = JSON.parse(entry.toString());
const result = UsernameMapperEntry.decode(parsed);
if (E.isRight(result)) {
    return result.right
} else {
    throw new Error(PathReporter.report(result).join(" "))
}

Neither feel too appealing to me, since the first strikes me as even less familiar to people used to the standard typescript paradigm, and the second doesn't really help readability in my view.

famedly-bot commented 1 year ago

In GitLab by @kate-shine on Dec 22, 2022, 16:39

Commented on src/usernamemapper.ts line 111

There's a question if the issue doesn't stem from the fact that fp-ts itself quite changes the paradigm.

On the other hand, I'd say that being more Rust-y is not a bad thing for current BE development and given the fact that UIA will be phased out at (hopefully) near future, it's an ok thing to do.

famedly-bot commented 1 year ago

In GitLab by @kate-shine on Dec 23, 2022, 13:08

approved this merge request

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 23, 2022, 13:10

added 2 commits

Compare with previous version

famedly-bot commented 1 year ago

In GitLab by @agraven on Dec 23, 2022, 13:10

enabled an automatic merge when the pipeline for e5e7061a1a8bae57cf37541618db6a80c98206cf succeeds