From 040eb77d95543a3808ee8203737246deaec10b5f Mon Sep 17 00:00:00 2001 From: Andrew Whitehead Date: Tue, 5 Apr 2022 12:37:53 -0700 Subject: [PATCH] add FromStr, Copy, PartialEq, Eq impls for sqlite options (#1784) Signed-off-by: Andrew Whitehead --- sqlx-core/src/sqlite/options/auto_vacuum.rs | 23 +++++++++++++++++- sqlx-core/src/sqlite/options/journal_mode.rs | 5 +++- sqlx-core/src/sqlite/options/locking_mode.rs | 25 +++++++++++++++++++- sqlx-core/src/sqlite/options/synchronous.rs | 2 +- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/sqlx-core/src/sqlite/options/auto_vacuum.rs b/sqlx-core/src/sqlite/options/auto_vacuum.rs index a2cce2a3f2..65d0c4613e 100644 --- a/sqlx-core/src/sqlite/options/auto_vacuum.rs +++ b/sqlx-core/src/sqlite/options/auto_vacuum.rs @@ -1,4 +1,7 @@ -#[derive(Debug, Clone)] +use crate::error::Error; +use std::str::FromStr; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SqliteAutoVacuum { None, Full, @@ -20,3 +23,21 @@ impl Default for SqliteAutoVacuum { SqliteAutoVacuum::None } } + +impl FromStr for SqliteAutoVacuum { + type Err = Error; + + fn from_str(s: &str) -> Result { + Ok(match &*s.to_ascii_lowercase() { + "none" => SqliteAutoVacuum::None, + "full" => SqliteAutoVacuum::Full, + "incremental" => SqliteAutoVacuum::Incremental, + + _ => { + return Err(Error::Configuration( + format!("unknown value {:?} for `auto_vacuum`", s).into(), + )); + } + }) + } +} diff --git a/sqlx-core/src/sqlite/options/journal_mode.rs b/sqlx-core/src/sqlite/options/journal_mode.rs index c48415c6f8..d0424adbb4 100644 --- a/sqlx-core/src/sqlite/options/journal_mode.rs +++ b/sqlx-core/src/sqlite/options/journal_mode.rs @@ -1,7 +1,10 @@ use crate::error::Error; use std::str::FromStr; -#[derive(Debug, Clone)] +/// Refer to [SQLite documentation] for the meaning of the database journaling mode. +/// +/// [SQLite documentation]: https://www.sqlite.org/pragma.html#pragma_journal_mode +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SqliteJournalMode { Delete, Truncate, diff --git a/sqlx-core/src/sqlite/options/locking_mode.rs b/sqlx-core/src/sqlite/options/locking_mode.rs index b713b2bb88..4f0900af69 100644 --- a/sqlx-core/src/sqlite/options/locking_mode.rs +++ b/sqlx-core/src/sqlite/options/locking_mode.rs @@ -1,4 +1,10 @@ -#[derive(Debug, Clone)] +use crate::error::Error; +use std::str::FromStr; + +/// Refer to [SQLite documentation] for the meaning of the connection locking mode. +/// +/// [SQLite documentation]: https://www.sqlite.org/pragma.html#pragma_locking_mode +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SqliteLockingMode { Normal, Exclusive, @@ -18,3 +24,20 @@ impl Default for SqliteLockingMode { SqliteLockingMode::Normal } } + +impl FromStr for SqliteLockingMode { + type Err = Error; + + fn from_str(s: &str) -> Result { + Ok(match &*s.to_ascii_lowercase() { + "normal" => SqliteLockingMode::Normal, + "exclusive" => SqliteLockingMode::Exclusive, + + _ => { + return Err(Error::Configuration( + format!("unknown value {:?} for `locking_mode`", s).into(), + )); + } + }) + } +} diff --git a/sqlx-core/src/sqlite/options/synchronous.rs b/sqlx-core/src/sqlite/options/synchronous.rs index 61d1290d6f..cd37682d4f 100644 --- a/sqlx-core/src/sqlite/options/synchronous.rs +++ b/sqlx-core/src/sqlite/options/synchronous.rs @@ -4,7 +4,7 @@ use std::str::FromStr; /// Refer to [SQLite documentation] for the meaning of various synchronous settings. /// /// [SQLite documentation]: https://www.sqlite.org/pragma.html#pragma_synchronous -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SqliteSynchronous { Off, Normal,