Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ch.becompany.authn
- trait Dsl[F[_]] {
- …
- }
- object Dsl {
- type UserRepository = List[User]
- type UserRepositoryState[A] = State[UserRepository, A]
- implicit object StateInterpreter extends Dsl[UserRepositoryState] {
- override def register(email: String @@ EmailAddress, password: String):
- UserRepositoryState[Either[RegistrationError, User]] =
- State { users =>
- if (users.exists(_.email === email))
- (users, RegistrationError("User already exists").asLeft)
- else {
- val user = User(email, password)
- (users :+ user, user.asRight)
- }
- }
- override def authn(email: String @@ EmailAddress, password: String):
- UserRepositoryState[Either[AuthnError, User]] =
- State.inspect(_
- .find(user => user.email === email && user.password === password)
- .toRight(AuthnError("Authentication failed")))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement