code: func (m *Message) FromDict(d *starlark.Dict) error {
  	iter := d.Iterate()
  	defer iter.Done()
  
  	var k starlark.Value
  	for iter.Next(&k) {
  		key, ok := k.(starlark.String)
  		if !ok {
  			return fmt.Errorf("got %s dict key, expecting a string", k.Type())
  		}
  		v, _, _ := d.Get(k)
  		if err := m.SetField(key.GoString(), v); err != nil {
  			return err
  		}
  	}
  
  	return nil
  }
docs: // FromDict populates fields of this message based on values in starlark.Dict.
  //
  // Doesn't reset the message. Basically does this:
  //
  //   for k in d:
  //     setattr(msg, k, d[k])
  //
  // Returns an error on type mismatch.