|
@@ -0,0 +1,52 @@
|
|
|
+package formatter
|
|
|
+
|
|
|
+import "github.com/docker/docker/api/types"
|
|
|
+
|
|
|
+const (
|
|
|
+ defaultCheckpointFormat = "table {{.Name}}"
|
|
|
+
|
|
|
+ checkpointNameHeader = "CHECKPOINT NAME"
|
|
|
+)
|
|
|
+
|
|
|
+// NewCheckpointFormat returns a format for use with a checkpoint Context
|
|
|
+func NewCheckpointFormat(source string) Format {
|
|
|
+ switch source {
|
|
|
+ case TableFormatKey:
|
|
|
+ return defaultCheckpointFormat
|
|
|
+ }
|
|
|
+ return Format(source)
|
|
|
+}
|
|
|
+
|
|
|
+// CheckpointWrite writes formatted checkpoints using the Context
|
|
|
+func CheckpointWrite(ctx Context, checkpoints []types.Checkpoint) error {
|
|
|
+ render := func(format func(subContext subContext) error) error {
|
|
|
+ for _, checkpoint := range checkpoints {
|
|
|
+ if err := format(&checkpointContext{c: checkpoint}); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ return ctx.Write(newCheckpointContext(), render)
|
|
|
+}
|
|
|
+
|
|
|
+type checkpointContext struct {
|
|
|
+ HeaderContext
|
|
|
+ c types.Checkpoint
|
|
|
+}
|
|
|
+
|
|
|
+func newCheckpointContext() *checkpointContext {
|
|
|
+ cpCtx := checkpointContext{}
|
|
|
+ cpCtx.header = volumeHeaderContext{
|
|
|
+ "Name": checkpointNameHeader,
|
|
|
+ }
|
|
|
+ return &cpCtx
|
|
|
+}
|
|
|
+
|
|
|
+func (c *checkpointContext) MarshalJSON() ([]byte, error) {
|
|
|
+ return marshalJSON(c)
|
|
|
+}
|
|
|
+
|
|
|
+func (c *checkpointContext) Name() string {
|
|
|
+ return c.c.Name
|
|
|
+}
|