chiark / gitweb /
Use lots of deref_to_field
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Feb 2021 23:37:35 +0000 (23:37 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Feb 2021 00:01:34 +0000 (00:01 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs
src/global.rs
src/sse.rs
wdriver.rs

index 36031b3ced931d2cb2d975e7216813923e35b5b1..a04a48472b5c0e93ac2c3900547f9c90f37c6482 100644 (file)
@@ -215,10 +215,8 @@ impl FromStr for AccountName {
 
 //---------- AccessRecord ----------
 
-impl Deref for AccessRecord {
-  type Target = Arc<dyn PlayerAccessSpec>;
-  fn deref(&self) -> &Self::Target { return &self.0 }
-}
+// No DerefMut, to make sure we save properly etc.
+deref_to_field!{AccessRecord, Arc<dyn PlayerAccessSpec>, 0}
 
 impl AccessRecord {
   pub fn new_unset() -> Self{ Self( Arc::new(PlayerAccessUnset) ) }
index 04f05837abbb0409808b0b4fc702bf843b098816..cad764ea5c7cb421f210c2d98c078d60fc1c54cd 100644 (file)
@@ -40,6 +40,7 @@ pub struct InstanceRef (Arc<Mutex<InstanceContainer>>);
 #[derive(Debug,Clone,Serialize,Deserialize,Default)]
 #[serde(transparent)]
 pub struct LinksTable(pub EnumMap<LinkKind, Option<String>>);
+deref_to_field_mut!{LinksTable, EnumMap<LinkKind, Option<String>>, 0}
 
 pub struct Instance {
   pub name: Arc<InstanceName>,
@@ -485,14 +486,6 @@ impl From<(LinkKind, &str)> for Html {
   }
 }
 
-impl Deref for LinksTable {
-  type Target = EnumMap<LinkKind, Option<String>>;
-  fn deref(&self) -> &Self::Target { &self.0 }
-}
-impl DerefMut for LinksTable {
-  fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 }
-}
-
 impl From<&LinksTable> for Html {
   fn from(links: &LinksTable) -> Html {
     let mut s = links.iter()
@@ -1265,10 +1258,8 @@ impl PiecesLoaded {
 
 // ---------- gamestate pieces table ----------
 
-impl Deref for Pieces {
-  type Target = ActualPieces;
-  fn deref(&self) -> &ActualPieces { &self.0 }
-}
+// No DerefMut to make sure we send updates, save, etc.
+deref_to_field!{Pieces, ActualPieces, 0}
 
 impl Pieces {
   pub fn get_mut(&mut self, piece: PieceId) -> Option<&mut PieceState> {
index ab4af1195cae30bf08de529416569e1780b345d2..4cb93bb5071bbfce43cefbb2c3ab0a93284dfd3c 100644 (file)
@@ -37,11 +37,7 @@ struct UpdateReader {
   ending_send: Option<io::Cursor<Box<[u8]>>>,
   init_confirmation_send: iter::Once<()>,
 }
-
-impl Deref for UpdateReader {
-  type Target = UpdateReaderWN;
-  fn deref(&self) -> &UpdateReaderWN { &self.wn }
-}
+deref_to_field!{UpdateReader, UpdateReaderWN, wn} // no DerefMut
 
 #[derive(Error,Debug)]
 #[error("WouldBlock error misreported!")]
index 8eb97c6eb0f734fe957cbe2e5d9227096246b454..67884498355a732edea52049fc4b43fb05867dc2 100644 (file)
@@ -29,11 +29,7 @@ pub struct Opts {
   #[structopt(long="--geckodriver-args", default_value="")]
   geckodriver_args: String,
 }
-
-impl Deref for Opts {
-  type Target = apitest::Opts;
-  fn deref(&self) -> &Self::Target { &self.at }
-}
+deref_to_field!{Opts, apitest::Opts, at}
 impl AsRef<apitest::Opts> for Opts {
   fn as_ref(&self) -> &apitest::Opts { &self.at }
 }