code: func AssertPlanValid(schema *configschema.Block, priorState, config, plannedState cty.Value) []error {
  	return assertPlanValid(schema, priorState, config, plannedState, nil)
  }
docs: // AssertPlanValid checks checks whether a planned new state returned by a
  // provider's PlanResourceChange method is suitable to achieve a change
  // from priorState to config. It returns a slice with nonzero length if
  // any problems are detected. Because problems here indicate bugs in the
  // provider that generated the plannedState, they are written with provider
  // developers as an audience, rather than end-users.
  //
  // All of the given values must have the same type and must conform to the
  // implied type of the given schema, or this function may panic or produce
  // garbage results.
  //
  // During planning, a provider may only make changes to attributes that are
  // null (unset) in the configuration and are marked as "computed" in the
  // resource type schema, in order to insert any default values the provider
  // may know about. If the default value cannot be determined until apply time,
  // the provider can return an unknown value. Providers are forbidden from
  // planning a change that disagrees with any non-null argument in the
  // configuration.
  //
  // As a special exception, providers _are_ allowed to provide attribute values
  // conflicting with configuration if and only if the planned value exactly
  // matches the corresponding attribute value in the prior state. The provider
  // can use this to signal that the new value is functionally equivalent to
  // the old and thus no change is required.