message: Add unpack_box_str
  Summary: Useful in some cases outlined in the comments. Not sure we can support this long term when we start implementing strings in the Value itself, but useful now.
diff: @@ -155,6 +155,15 @@ impl<'v> ValueMem<'v> {
  )
  }
  + #[allow(clippy::borrowed_box)]
  + fn unpack_box_str(&self) -> Option<&Box<str>> {
  + match self {
  + Self::Str(x) => Some(x),
  + Self::Forward(x) => x.unpack_box_str(),
  + _ => None,
  + }
  + }
  +
  fn unpack_str(&self) -> Option<&str> {
  match self {
  Self::Str(x) => Some(x),
  @@ -241,6 +250,14 @@ impl FrozenValueMem {
  }
  }
  + #[allow(clippy::borrowed_box)]
  + fn unpack_box_str(&self) -> Option<&Box<str>> {
  + match self {
  + Self::Str(x) => Some(x),
  + _ => None,
  + }
  + }
  +
  fn get_ref<'v>(&self) -> &dyn StarlarkValue<'v> {
  match self {
  Self::Str(x) => x,
  @@ -308,6 +325,21 @@ impl<'v> Value<'v> {
  self.0.unpack_int()
  }
  + /// Like [`unpack_str`](Value::unpack_str), but gives a pointer to a boxed string.
  + /// Mostly useful for when you want to convert the string to a `dyn` trait, but can't
  + /// form a `dyn` of an unsized type.
  + ///
  + /// Unstable and likely to be removed in future, as the presence of the `Box` is
  + /// not a guaranteed part of the API.
  + #[allow(clippy::borrowed_box)]
  + pub fn unpack_box_str(self) -> Option<&'v Box<str>> {
  + match self.0.unpack() {
  + PointerUnpack::Ptr1(x) => x.unpack_box_str(),
  + PointerUnpack::Ptr2(x) => x.unpack_box_str(),
  + _ => None,
  + }
  + }
  +
  /// Obtain the underlying `str` if it is a string.
  pub fn unpack_str(self) -> Option<&'v str> {
  match self.0.unpack() {
  @@ -422,6 +454,15 @@ impl FrozenValue {
  }
  }
  + #[allow(clippy::trivially_copy_pass_by_ref)]
  + #[allow(clippy::borrowed_box)]
  + pub(crate) fn unpack_box_str<'v>(&'v self) -> Option<&'v Box<str>> {
  + match self.0.unpack_ptr1() {
  + Some(x) => x.unpack_box_str(),
  + _ => None,
  + }
  + }
  +
  /// Get a pointer to the [`StarlarkValue`] object this value represents.
  pub fn get_ref<'v>(self) -> &'v dyn StarlarkValue<'v> {
  match self.0.unpack() {
  