]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/terraform/terraform/shadow.go
Initial transfer of provider code
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / shadow.go
1 package terraform
2
3 // Shadow is the interface that any "shadow" structures must implement.
4 //
5 // A shadow structure is an interface implementation (typically) that
6 // shadows a real implementation and verifies that the same behavior occurs
7 // on both. The semantics of this behavior are up to the interface itself.
8 //
9 // A shadow NEVER modifies real values or state. It must always be safe to use.
10 //
11 // For example, a ResourceProvider shadow ensures that the same operations
12 // are done on the same resources with the same configurations.
13 //
14 // The typical usage of a shadow following this interface is to complete
15 // the real operations, then call CloseShadow which tells the shadow that
16 // the real side is done. Then, once the shadow is also complete, call
17 // ShadowError to find any errors that may have been caught.
18 type Shadow interface {
19 // CloseShadow tells the shadow that the REAL implementation is
20 // complete. Therefore, any calls that would block should now return
21 // immediately since no more changes will happen to the real side.
22 CloseShadow() error
23
24 // ShadowError returns the errors that the shadow has found.
25 // This should be called AFTER CloseShadow and AFTER the shadow is
26 // known to be complete (no more calls to it).
27 ShadowError() error
28 }