@callback exists?(struct()) :: boolean()
@callback new(entry_file_path :: String.t(), source_file_path :: String.t()) :: struct()
@callback read(struct()) :: {:ok, any()} | {:error, any()}
@callback store_path(struct()) :: String.t()
@callback write( struct(), any() ) :: :ok | {:error, any()}