message: Add types for fields on builtin providers
  Summary: Added reasonable looking types to the various built in provides
diff: //! Trait and default implementations of a trait that will show starlark type annotations for a
  //! given type.
  +use std::marker::PhantomData;
  +
  use either::Either;
  use crate::values::none::NoneType;
  @@ -29,6 +31,27 @@ pub trait StarlarkTypeRepr {
  fn starlark_type_repr() -> String;
  }
  +/// A dict used just for display purposes.
  +///
  +/// `DictOf` requires `Unpack` to be implemented, and `Dict` does not take type parameters so
  +/// we need something for documentation generation.
  +pub struct DictType<K: StarlarkTypeRepr, V: StarlarkTypeRepr> {
  + #[allow(unused)]
  + k: PhantomData<K>,
  + #[allow(unused)]
  + v: PhantomData<V>,
  +}
  +
  +impl<K: StarlarkTypeRepr, V: StarlarkTypeRepr> StarlarkTypeRepr for DictType<K, V> {
  + fn starlark_type_repr() -> String {
  + format!(
  + "{{{}: {}}}",
  + K::starlark_type_repr(),
  + V::starlark_type_repr()
  + )
  + }
  +}
  +
  impl<'v, T: StarlarkValue<'v> + ?Sized> StarlarkTypeRepr for T {
  fn starlark_type_repr() -> String {
  Self::get_type_starlark_repr()
  