code: func (i *Isolator) UnmarshalJSON(b []byte) error {
  	var ii isolator
  	err := json.Unmarshal(b, &ii)
  	if err != nil {
  		return err
  	}
  
  	var dst IsolatorValue
  	con, ok := isolatorMap[ii.Name]
  	if ok {
  		dst = con()
  		err = dst.UnmarshalJSON(*ii.ValueRaw)
  		if err != nil {
  			return err
  		}
  		err = dst.AssertValid()
  		if err != nil {
  			return err
  		}
  	}
  
  	i.value = dst
  	i.ValueRaw = ii.ValueRaw
  	i.Name = ii.Name
  
  	return nil
  }
docs: // UnmarshalJSON populates this Isolator from a JSON-encoded representation. To
  // unmarshal the Value of the Isolator, it will use the appropriate constructor
  // as registered by AddIsolatorValueConstructor.