package libpod

// State is a storage backend for libpod's current state
type State interface {
	// Accepts full ID of container
	GetContainer(id string) (*Container, error)
	// Accepts full or partial IDs (as long as they are unique) and names
	LookupContainer(idOrName string) (*Container, error)
	// Checks if a container with the given ID is present in the state
	HasContainer(id string) (bool, error)
	// Adds container to state
	// If the container belongs to a pod, that pod must already be present
	// in the state when the container is added
	AddContainer(ctr *Container) error
	// Removes container from state
	// If the container belongs to a pod, it will be removed from the pod
	// as well
	RemoveContainer(ctr *Container) error
	// Retrieves all containers presently in state
	GetAllContainers() ([]*Container, error)

	// Accepts full ID of pod
	GetPod(id string) (*Pod, error)
	// Accepts full or partial IDs (as long as they are unique) and names
	LookupPod(idOrName string) (*Pod, error)
	// Checks if a pod with the given ID is present in the state
	HasPod(id string) (bool, error)
	// Adds pod to state
	// Any containers within the pod not already in the state will be added
	// with it
	AddPod(pod *Pod) error
	// Removes pod from state
	// All containers within the pod will also be removed
	RemovePod(pod *Pod) error
	// Retrieves all pods presently in state
	GetAllPods() ([]*Pod, error)
}