chiark / gitweb /
for revert: daft AccountName recovery
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 28 Oct 2020 22:37:57 +0000 (22:37 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 28 Oct 2020 22:37:57 +0000 (22:37 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs

index 4ba85afc3631afd3e2650a25b6f3c380ec01ee03..ccfc083672ef73ed16191eeb02e64995fb31d2b5 100644 (file)
@@ -168,14 +168,33 @@ pub fn save_accounts_now() -> Result<(), InternalError> {
   panic!("xxx")
 }
 
+pub type Mut<'l> = (
+  MappedRwLockWriteGuard<'l, AccountRecord>,
+  MappedRwLockWriteGuard<'l, AccountName>,
+  AccountId,
+);
+
+trait AccountNameOrId {
+  fn initial_lookup(Self, accounts: &Accounts) -> Option<AccountId>;
+}
+
+impl<'n> AccountNameOrId for &'n AccountName {
+  #[throws(as Option)]
+  fn lookup_mut(self, accounts: &RwLockWriteGuard<Accounts>) -> AccountLookupMut {
+    let acctid = *accounts.names.get(self)?;
+    
+}
+
 #[derive(Default,Debug)]
-struct LookupHelper {
+struct LookupHelper<'d> {
   acctid_r: Option<AccountId>,
 }
 
-impl LookupHelper {
+impl<'d, K:AccountNameOrId> LookupHelper<'d, K> {
   #[throws(as Option)]
-  fn get(&mut self, accounts: &Accounts, account: &AccountName) -> AccountId {
+  fn get(&mut self, accounts: &Accounts, key: K) -> AccountId {
+    let acctid = key.initial_lookup(accounts)?;
+    let name = *accounts.records.
     let acctid = *accounts.names.get(account)?;
     self.acctid_r = Some(acctid);
     acctid
@@ -199,7 +218,7 @@ impl AccountRecord {
     }).collect()
   }
 
-  pub fn lookup(account: &AccountName,  _: Authorisation<AccountName>)
+  pub fn lookup<K:AccountNameOrId>(key: K,  _: Authorisation<AccountName>)
                 -> Option<(MappedRwLockReadGuard<'static, AccountRecord>,
                            AccountId)>
   {
@@ -213,10 +232,9 @@ impl AccountRecord {
     )
   }
 
-  pub fn lookup_mut_caller_must_save
-    ( account: &AccountName, _auth: Authorisation<AccountName>)
-    -> Option<(MappedRwLockWriteGuard<'static, AccountRecord>,
-               AccountId)>
+  pub fn lookup_mut_caller_must_save<K:AccountNameOrId>
+    ( key: &K, _auth: Authorisation<AccountName>)
+    -> Option<Mut>
   {
     let mut helper : LookupHelper = default();
     helper.wrap(