storage.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. use fermi::UseAtomRef;
  2. use gloo_storage::{LocalStorage, Storage};
  3. use serde::{Deserialize, Serialize};
  4. use crate::{
  5. constants::{DIOXUS_FRONT_AUTH_REQUEST, DIOXUS_FRONT_AUTH_TOKEN},
  6. oidc::{AuthRequestState, AuthTokenState},
  7. };
  8. #[derive(Serialize, Deserialize, Clone)]
  9. pub struct StorageEntry<T> {
  10. pub key: String,
  11. pub value: T,
  12. }
  13. pub trait PersistentWrite<T: Serialize + Clone> {
  14. fn persistent_set(atom_ref: &UseAtomRef<Option<T>>, entry: Option<T>);
  15. }
  16. impl PersistentWrite<AuthTokenState> for AuthTokenState {
  17. fn persistent_set(
  18. atom_ref: &UseAtomRef<Option<AuthTokenState>>,
  19. entry: Option<AuthTokenState>,
  20. ) {
  21. *atom_ref.write() = entry.clone();
  22. LocalStorage::set(DIOXUS_FRONT_AUTH_TOKEN, entry).unwrap();
  23. }
  24. }
  25. impl PersistentWrite<AuthRequestState> for AuthRequestState {
  26. fn persistent_set(
  27. atom_ref: &UseAtomRef<Option<AuthRequestState>>,
  28. entry: Option<AuthRequestState>,
  29. ) {
  30. *atom_ref.write() = entry.clone();
  31. LocalStorage::set(DIOXUS_FRONT_AUTH_REQUEST, entry).unwrap();
  32. }
  33. }