Move common macros to a shared location

PiperOrigin-RevId: 559855079
diff --git a/rust/string.rs b/rust/string.rs
index fe78871..523a508 100644
--- a/rust/string.rs
+++ b/rust/string.rs
@@ -34,6 +34,7 @@
 
 use crate::__internal::{Private, PtrAndLen, RawMessage};
 use crate::__runtime::{BytesAbsentMutData, BytesPresentMutData, InnerBytesMut};
+use crate::macros::impl_forwarding_settable_value;
 use crate::{Mut, MutProxy, Proxied, ProxiedWithPresence, SettableValue, View, ViewProxy};
 use std::borrow::Cow;
 use std::cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd};
@@ -230,30 +231,6 @@
     }
 }
 
-macro_rules! impl_forwarding_settable_value {
-    ($proxied:ty, $self:ident => $self_forwarding_expr:expr) => {
-        fn set_on($self, _private: Private, mutator: BytesMut<'_>) {
-            ($self_forwarding_expr).set_on(Private, mutator)
-        }
-
-        fn set_on_absent(
-            $self,
-            _private: Private,
-            absent_mutator: <$proxied as ProxiedWithPresence>::AbsentMutData<'_>,
-        ) -> <$proxied as ProxiedWithPresence>::PresentMutData<'_> {
-            ($self_forwarding_expr).set_on_absent(Private, absent_mutator)
-        }
-
-        fn set_on_present(
-            $self,
-            _private: Private,
-            present_mutator: <$proxied as ProxiedWithPresence>::PresentMutData<'_>,
-        ) {
-            ($self_forwarding_expr).set_on_present(Private, present_mutator)
-        }
-    };
-}
-
 impl<'a, const N: usize> SettableValue<[u8]> for &'a [u8; N] {
     // forward to `self[..]`
     impl_forwarding_settable_value!([u8], self => &self[..]);