@callback fetch_source(source()) :: nil | {:ok, binary(), Keyword.t()}
@callback invalid_source?(source()) :: boolean()
@callback put_source(source(), any()) :: :ok