forked from cadey/maj
133 lines
6.2 KiB
Rust
133 lines
6.2 KiB
Rust
/// Status codes as specified in [the spec](https://gemini.circumlunar.space/docs/specification.html).
|
|
#[derive(Copy, Clone, num_derive::FromPrimitive, PartialEq, Debug)]
|
|
pub enum StatusCode {
|
|
/// The requested resource accepts a line of textual user input.
|
|
/// The <META> line is a prompt which should be displayed to the
|
|
/// user. The same resource should then be requested again with the
|
|
/// user's input included as a query component. Queries are
|
|
/// included in requests as per the usual generic URL definition in
|
|
/// RFC3986, i.e. separated from the path by a ?. Reserved characters
|
|
/// used in the user's input must be "percent-encoded" as per RFC3986,
|
|
/// and space characters should also be percent-encoded.
|
|
Input = 10,
|
|
|
|
/// As per status code 10, but for use with sensitive input such as
|
|
/// passwords. Clients should present the prompt as per status code
|
|
/// 10, but the user's input should not be echoed to the screen to
|
|
/// prevent it being read by "shoulder surfers".
|
|
SensitiveInput = 11,
|
|
|
|
/// The request was handled successfully and a response body will follow the response header. The <META> line is a MIME media type which applies to the response body.
|
|
Success = 20,
|
|
|
|
/// The server is redirecting the client to a new location for the
|
|
/// requested resource. There is no response body. <META> is a new
|
|
/// URL for the requested resource. The URL may be absolute or
|
|
/// relative. The redirect should be considered temporary, i.e.
|
|
/// clients should continue to request the resource at the original
|
|
/// address and should not performance convenience actions like
|
|
/// automatically updating bookmarks. There is no response body.
|
|
TemporaryRedirect = 30,
|
|
|
|
/// The requested resource should be consistently requested from the
|
|
/// new URL provided in future. Tools like search engine indexers or
|
|
/// content aggregators should update their configurations to avoid
|
|
/// requesting the old URL, and end-user clients may automatically
|
|
/// update bookmarks, etc. Note that clients which only pay attention
|
|
/// to the initial digit of status codes will treat this as a temporary
|
|
/// redirect. They will still end up at the right place, they just
|
|
/// won't be able to make use of the knowledge that this redirect is
|
|
/// permanent, so they'll pay a small performance penalty by having
|
|
///to follow the redirect each time.
|
|
PermanentRedirect = 31,
|
|
|
|
/// The request has failed. There is no response body. The nature of
|
|
/// the failure is temporary, i.e. an identical request MAY succeed
|
|
/// in the future. The contents of <META> may provide additional
|
|
/// information on the failure, and should be displayed to human users.
|
|
TemporaryFailure = 40,
|
|
|
|
/// The server is unavailable due to overload or maintenance. (cf HTTP
|
|
/// 503)
|
|
ServerUnavailable = 41,
|
|
|
|
/// A CGI process, or similar system for generating dynamic content,
|
|
/// died unexpectedly or timed out.
|
|
CGIError = 42,
|
|
|
|
/// A proxy request failed because the server was unable to
|
|
/// successfully complete a transaction with the remote host. (cf HTTP
|
|
/// 502, 504)
|
|
ProxyError = 43,
|
|
|
|
/// Rate limiting is in effect. <META> is an integer number of seconds
|
|
/// which the client must wait before another request is made to this
|
|
/// server. (cf HTTP 429)
|
|
SlowDown = 44,
|
|
|
|
/// The request has failed. There is no response body. The nature of
|
|
/// the failure is permanent, i.e. identical future requests will
|
|
/// reliably fail for the same reason. The contents of <META> may
|
|
/// provide additional information on the failure, and should be
|
|
/// displayed to human users. Automatic clients such as aggregators
|
|
/// or indexing crawlers should not repeat this request.
|
|
PermanentFailure = 50,
|
|
|
|
/// The requested resource could not be found but may be available in
|
|
/// the future. (cf HTTP 404) (struggling to remember this important
|
|
/// status code? Easy: you can't find things hidden at Area 51!)
|
|
NotFound = 51,
|
|
|
|
/// The resource requested is no longer available and will not be
|
|
/// available again. Search engines and similar tools should remove this
|
|
/// resource from their indices. Content aggregators should stop
|
|
/// requesting the resource and convey to their human users that the
|
|
/// subscribed resource is gone. (cf HTTP 410)
|
|
Gone = 52,
|
|
|
|
/// The request was for a resource at a domain not served by the server
|
|
/// and the server does not accept proxy requests.
|
|
ProxyRequestRefused = 53,
|
|
|
|
/// The server was unable to parse the client's request, presumably due
|
|
/// to a malformed request. (cf HTTP 400)
|
|
BadRequest = 59,
|
|
|
|
/// The requested resource requires a client certificate to access. If
|
|
/// the request was made without a certificate, it should be repeated
|
|
/// with one. If the request was made with a certificate, the server
|
|
/// did not accept it and the request should be repeated with a
|
|
/// different certificate. The contents of <META> (and/or the specific
|
|
/// 6x code) may provide additional information on certificate
|
|
/// requirements or the reason a certificate was rejected.
|
|
ClientCertificateRequired = 60,
|
|
|
|
/// The supplied client certificate is not authorised for accessing the
|
|
/// particular requested resource. The problem is not with the
|
|
/// certificate itself, which may be authorised for other resources.
|
|
CertificateNotAuthorized = 61,
|
|
|
|
/// The supplied client certificate was not accepted because it is not
|
|
/// valid. This indicates a problem with the certificate in and of itself,
|
|
/// with no consideration of the particular requested resource. The most
|
|
/// likely cause is that the certificate's validity start date is in the
|
|
/// future or its expiry date has passed, but this code may also
|
|
/// indicate an invalid signature, or a violation of a X509 standard
|
|
/// requirements. The <META> should provide more information about the
|
|
/// exact error.
|
|
CertificateNotValid = 62,
|
|
}
|
|
|
|
impl StatusCode {
|
|
// Converts this StatusCode to its numerical representation, consuming it.
|
|
pub fn num(self) -> u8 {
|
|
self as u8
|
|
}
|
|
}
|
|
|
|
impl Default for StatusCode {
|
|
fn default() -> Self {
|
|
StatusCode::Success
|
|
}
|
|
}
|