BaseProvider.swift 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Combine
  2. import Foundation
  3. import Swinject
  4. protocol Provider {
  5. init(resolver: Resolver)
  6. var user: CurrentValueSubject<User?, Never> { get }
  7. }
  8. class BaseProvider: Provider, Injectable {
  9. let user = CurrentValueSubject<User?, Never>(nil)
  10. var lifetime = Set<AnyCancellable>()
  11. @Injected() var authorizationManager: AuthorizationManager!
  12. required init(resolver: Resolver) {
  13. injectServices(resolver)
  14. subscribe()
  15. }
  16. private func subscribe() {
  17. authorizationManager.credentials
  18. .map { credentials -> User? in
  19. guard let credentials = credentials else { return nil }
  20. return User(id: credentials.id)
  21. }
  22. .sink { user in
  23. self.user.send(user)
  24. }
  25. .store(in: &lifetime)
  26. }
  27. func type(for file: String) -> JSON.Type {
  28. switch file {
  29. case OpenAPS.Monitor.pumpHistory:
  30. return [PumpHistoryEvent].self
  31. default:
  32. return RawJSON.self
  33. }
  34. }
  35. }