//! Various enums used throughout the `webview` module. use crate::foundation::NSInteger; /// Describes a navigation type from within the `WebView`. #[derive(Clone, Copy, Debug)] pub enum NavigationType { /// A user activated a link. LinkActivated, /// A user submitted a form. FormSubmitted, /// A user went backwards or fowards. BackForward, /// A user reloaded the webview. Reload, /// A user resubmitted a form. FormResubmitted, /// Other. Other } // For whatever reason, impl From<> below doesn't generate the reciprocal impl Into<> we need. // So I guess we'll do it ourselves. // // This panic will be removed and is for testing purposes only right now. impl Into for NSInteger { fn into(self) -> NavigationType { match self { -1 => NavigationType::Other, 0 => NavigationType::LinkActivated, 1 => NavigationType::FormSubmitted, 2 => NavigationType::BackForward, 3 => NavigationType::Reload, 4 => NavigationType::FormResubmitted, _ => { panic!("Unsupported WKWebView NavigationType value found!"); } } } } impl From for NSInteger { fn from(nav_type: NavigationType) -> Self { match nav_type { NavigationType::Other => -1, NavigationType::LinkActivated => 0, NavigationType::FormSubmitted => 1, NavigationType::BackForward => 2, NavigationType::Reload => 3, NavigationType::FormResubmitted => 4 } } } /// Describes the policy for a given navigation. #[derive(Clone, Copy, Debug)] pub enum NavigationPolicy { /// Should be canceled. Cancel, /// Allowed. Allow } impl From for NSInteger { fn from(policy: NavigationPolicy) -> Self { match policy { NavigationPolicy::Cancel => 0, NavigationPolicy::Allow => 1 } } } /// Describes a response policy for a given navigation. #[derive(Clone, Copy, Debug)] pub enum NavigationResponsePolicy { /// Should be canceled. Cancel, /// Allowed. Allow, /// This is a private API, and likely won't make it into the App Store. Will only be available /// if you opt in via the `webview-downloading` feature. #[cfg(feature = "webview-downloading")] BecomeDownload } impl From for NSInteger { fn from(policy: NavigationResponsePolicy) -> Self { match policy { NavigationResponsePolicy::Cancel => 0, NavigationResponsePolicy::Allow => 1, #[cfg(feature = "webview-downloading")] NavigationResponsePolicy::BecomeDownload => 2 } } } /// Dictates where a given user script should be injected. #[derive(Clone, Copy, Debug)] pub enum InjectAt { /// Inject at the start of the document. Start = 0, /// Inject at the end of the document. End = 1 } impl From for NSInteger { fn from(at: InjectAt) -> Self { match at { InjectAt::Start => 0, InjectAt::End => 1 } } }