Struct cargo::sources::registry::http_remote::HttpRegistry
source · pub struct HttpRegistry<'cfg> {Show 14 fields
index_path: Filesystem,
cache_path: Filesystem,
source_id: SourceId,
config: &'cfg Config,
url: Url,
multi: Multi,
requested_update: bool,
downloads: Downloads<'cfg>,
multiplexing: bool,
fresh: HashSet<PathBuf>,
fetch_started: bool,
registry_config: Option<RegistryConfig>,
auth_required: bool,
login_url: Option<Url>,
}
Expand description
A registry served by the HTTP-based registry API.
This type is primarily accessed through the RegistryData
trait.
HttpRegistry
implements the HTTP-based registry API outlined in RFC 2789. Read the RFC for
the complete protocol, but roughly the implementation loads each index file (e.g.,
config.json or re/ge/regex) from an HTTP service rather than from a locally cloned git
repository. The remote service can more or less be a static file server that simply serves the
contents of the origin git repository.
Implemented naively, this leads to a significant amount of network traffic, as a lookup of any
index file would need to check with the remote backend if the index file has changed. This
cost is somewhat mitigated by the use of HTTP conditional fetches (If-Modified-Since
and
If-None-Match
for ETag
s) which can be efficiently handled by HTTP/2.
Fields§
§index_path: Filesystem
§cache_path: Filesystem
§source_id: SourceId
§config: &'cfg Config
§url: Url
Store the server URL without the protocol prefix (sparse+)
multi: Multi
HTTP multi-handle for asynchronous/parallel requests.
requested_update: bool
Has the client requested a cache update?
Only if they have do we double-check the freshness of each locally-stored index file.
downloads: Downloads<'cfg>
State for currently pending index downloads.
multiplexing: bool
Does the config say that we can use HTTP multiplexing?
fresh: HashSet<PathBuf>
What paths have we already fetched since the last index update?
We do not need to double-check any of these index files since we have already done so.
fetch_started: bool
Have we started to download any index files?
registry_config: Option<RegistryConfig>
Cached registry configuration.
auth_required: bool
Should we include the authorization header?
login_url: Option<Url>
Url to get a token for the registry.
Implementations§
source§impl<'cfg> HttpRegistry<'cfg>
impl<'cfg> HttpRegistry<'cfg>
pub fn new(
source_id: SourceId,
config: &'cfg Config,
name: &str
) -> CargoResult<HttpRegistry<'cfg>>
fn handle_http_header(buf: &[u8]) -> Option<(&str, &str)>
fn start_fetch(&mut self) -> CargoResult<()>
fn handle_completed_downloads(&mut self) -> CargoResult<()>
fn full_url(&self, path: &Path) -> String
fn is_fresh(&self, path: &Path) -> bool
sourcefn config_cached(&mut self) -> CargoResult<Option<&RegistryConfig>>
fn config_cached(&mut self) -> CargoResult<Option<&RegistryConfig>>
Get the cached registry configuration, if it exists.
sourcefn config(&mut self) -> Poll<CargoResult<&RegistryConfig>>
fn config(&mut self) -> Poll<CargoResult<&RegistryConfig>>
Get the registry configuration.
Trait Implementations§
source§impl<'cfg> RegistryData for HttpRegistry<'cfg>
impl<'cfg> RegistryData for HttpRegistry<'cfg>
source§fn index_path(&self) -> &Filesystem
fn index_path(&self) -> &Filesystem
source§fn assert_index_locked<'a>(&self, path: &'a Filesystem) -> &'a Path
fn assert_index_locked<'a>(&self, path: &'a Filesystem) -> &'a Path
source§fn is_updated(&self) -> bool
fn is_updated(&self) -> bool
source§fn load(
&mut self,
_root: &Path,
path: &Path,
index_version: Option<&str>
) -> Poll<CargoResult<LoadResponse>>
fn load(
&mut self,
_root: &Path,
path: &Path,
index_version: Option<&str>
) -> Poll<CargoResult<LoadResponse>>
source§fn config(&mut self) -> Poll<CargoResult<Option<RegistryConfig>>>
fn config(&mut self) -> Poll<CargoResult<Option<RegistryConfig>>>
config.json
file and returns it. Read moresource§fn invalidate_cache(&mut self)
fn invalidate_cache(&mut self)
source§fn download(&mut self, pkg: PackageId, checksum: &str) -> CargoResult<MaybeLock>
fn download(&mut self, pkg: PackageId, checksum: &str) -> CargoResult<MaybeLock>
.crate
file. Read moresource§fn finish_download(
&mut self,
pkg: PackageId,
checksum: &str,
data: &[u8]
) -> CargoResult<File>
fn finish_download(
&mut self,
pkg: PackageId,
checksum: &str,
data: &[u8]
) -> CargoResult<File>
.crate
file to disk. Read moresource§fn is_crate_downloaded(&self, pkg: PackageId) -> bool
fn is_crate_downloaded(&self, pkg: PackageId) -> bool
.crate
file is already downloaded.source§fn block_until_ready(&mut self) -> CargoResult<()>
fn block_until_ready(&mut self) -> CargoResult<()>
Auto Trait Implementations§
impl<'cfg> !RefUnwindSafe for HttpRegistry<'cfg>
impl<'cfg> !Send for HttpRegistry<'cfg>
impl<'cfg> !Sync for HttpRegistry<'cfg>
impl<'cfg> Unpin for HttpRegistry<'cfg>
impl<'cfg> !UnwindSafe for HttpRegistry<'cfg>
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 672 bytes