code: func (cs *ChangeSrc) Decode(ty cty.Type) (*Change, error) {
  	var err error
  	before := cty.NullVal(ty)
  	after := cty.NullVal(ty)
  
  	if len(cs.Before) > 0 {
  		before, err = cs.Before.Decode(ty)
  		if err != nil {
  			return nil, fmt.Errorf("error decoding 'before' value: %s", err)
  		}
  	}
  	if len(cs.After) > 0 {
  		after, err = cs.After.Decode(ty)
  		if err != nil {
  			return nil, fmt.Errorf("error decoding 'after' value: %s", err)
  		}
  	}
  	return &Change{
  		Action: cs.Action,
  		Before: before,
  		After:  after,
  	}, nil
  }
docs: // Decode unmarshals the raw representations of the before and after values
  // to produce a Change object. Pass the type constraint that the result must
  // conform to.
  //
  // Where a ChangeSrc is embedded in some other struct, it's generally better
  // to call the corresponding Decode method of that struct rather than working
  // directly with its embedded Change.