code: func LoadProtoModule(name string) (starlark.StringDict, error) {
  	desc, err := loadFileDesc(name)
  	if err != nil {
  		return nil, err
  	}
  
  	pkg := desc.GetPackage()
  	dict := starlark.StringDict{}
  
  	// Add constructors for all messages defined at the package level.
  	for _, msg := range desc.MessageType {
  		val, err := newMessageCtor(pkg, msg)
  		if err != nil {
  			return nil, err
  		}
  		dict[msg.GetName()] = val
  	}
  
  	// Inject enum constants for enums defined at the package level.
  	for _, enum := range desc.EnumType {
  		injectEnumValues(dict, enum)
  	}
  
  	return starlark.StringDict{
  		pkg: starlarkstruct.FromStringDict(starlark.String(pkg), dict),
  	}, nil
  }
docs: // LoadProtoModule loads a protobuf module, specified by its full path,
  // for example "a/b/c.proto".
  // The module should be registered in the process's protobuf descriptors set.
  // Returns a dict with single struct named after the proto package.
  // It has all message constructors defined inside.