Revision control

Copy as Markdown

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
/// The result of an attempted ping upload.
#[derive(Debug)]
pub enum UploadResult {
/// A recoverable failure.
///
/// During upload something went wrong,
/// e.g. the network connection failed.
/// The upload should be retried at a later time.
RecoverableFailure {
#[doc(hidden)]
/// Unused field. Required because UniFFI can't handle variants without fields.
unused: i8,
},
/// An unrecoverable upload failure.
///
/// A possible cause might be a malformed URL.
UnrecoverableFailure {
#[doc(hidden)]
/// Unused field. Required because UniFFI can't handle variants without fields.
unused: i8,
},
/// A HTTP response code.
///
/// This can still indicate an error, depending on the status code.
HttpStatus {
/// The HTTP status code
code: i32,
},
/// Signal that this uploader is done with work
/// and won't accept new work.
Done {
#[doc(hidden)]
/// Unused field. Required because UniFFI can't handle variants without fields.
unused: i8,
},
}
impl UploadResult {
/// Gets the label to be used in recording error counts for upload.
///
/// Returns `None` if the upload finished succesfully.
/// Failures are recorded in the `ping_upload_failure` metric.
pub fn get_label(&self) -> Option<&str> {
match self {
UploadResult::HttpStatus { code: 200..=299 } => None,
UploadResult::HttpStatus { code: 400..=499 } => Some("status_code_4xx"),
UploadResult::HttpStatus { code: 500..=599 } => Some("status_code_5xx"),
UploadResult::HttpStatus { .. } => Some("status_code_unknown"),
UploadResult::UnrecoverableFailure { .. } => Some("unrecoverable"),
UploadResult::RecoverableFailure { .. } => Some("recoverable"),
UploadResult::Done { .. } => None,
}
}
/// A recoverable failure.
///
/// During upload something went wrong,
/// e.g. the network connection failed.
/// The upload should be retried at a later time.
pub fn recoverable_failure() -> Self {
Self::RecoverableFailure { unused: 0 }
}
/// An unrecoverable upload failure.
///
/// A possible cause might be a malformed URL.
pub fn unrecoverable_failure() -> Self {
Self::UnrecoverableFailure { unused: 0 }
}
/// A HTTP response code.
///
/// This can still indicate an error, depending on the status code.
pub fn http_status(code: i32) -> Self {
Self::HttpStatus { code }
}
/// This uploader is done.
pub fn done() -> Self {
Self::Done { unused: 0 }
}
}
/// Communication back whether the uploader loop should continue.
#[derive(Debug)]
pub enum UploadTaskAction {
/// Instruct the caller to continue with work.
Next,
/// Instruct the caller to end work.
End,
}