Skip to content

Instantly share code, notes, and snippets.

@pakoito
Last active February 13, 2022 15:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pakoito/925dd5b488cd49a77c8de8a21206f58e to your computer and use it in GitHub Desktop.
Save pakoito/925dd5b488cd49a77c8de8a21206f58e to your computer and use it in GitHub Desktop.
data class User(
val name: String
)
interface GetUserService {
fun Id.fetchUser(): User
}
context(Context)
fun makeGetUserService(): GetUserService = object : GetUserService {
override fun Id.fetchUser(): User =
getSharedPreferences().extractUser(this.toString())
}
object GetUser {
context(GetUserService)
fun Id.getUser(): User =
fetchUser()
}
object MainActivityViewModelPropagate {
context(GetUserService)
fun nextStep() {
getUser("123")
}
}
object MainActivityViewModelInjected {
fun nextStep(f: (Id) -> User) {
f("123")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val service = makeGetUserService()
with(service, MainActivityViewModelPropagate::nextStep)
MainActivityViewModelInjected.nextStep {
with(service, ::getUser)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment