1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//! The per-dialect seam for the password-reset store.
//!
//! The store is one implementation. Everything that genuinely differs between
//! PostgreSQL, SQLite, and MySQL 8 -- the statement text, the placeholder
//! style, the spelling of "now", and the storage representation of a timestamp
//! -- lives behind this module, and nothing else in [`super`] mentions a
//! driver by name.
//!
//! This mirrors [`crate::tokens`]'s, [`crate::auth::session_store`]'s, and
//! [`crate::jobs`]'s seams rather than sharing code with them, for the reason
//! the second of those states: a generic seam parameterised over table name,
//! history table, and lock would couple subsystems that have no reason to
//! change together, so a schema change in one could break another's migration.
use ;
/// The SQLx database the store speaks. Chosen by the `db-*` features; the
/// mutual-exclusion check lives in [`crate::database`].
pub type ResetDb = crateDriver;
/// The connection pool the store runs over -- the application's own pool.
pub type ResetPool = cratePool;
/// How a timestamp is stored in this dialect.
///
/// See [`crate::tokens`]'s seam for the full argument. In one line: SQLite has
/// no timestamp type, and comparing timestamps as text is only correct while
/// every writer agrees on the format down to the digit.
pub type StoredTime = ;
/// How a timestamp is stored in this dialect. See the PostgreSQL/MySQL variant
/// of this alias for why SQLite differs.
pub type StoredTime = i64;
/// Convert an instant into this dialect's storage representation.
pub
/// Convert an instant into this dialect's storage representation.
///
/// SQLite stores epoch milliseconds, so sub-millisecond precision is dropped.
/// A reset deadline is an hour away; a millisecond either side of it is not a
/// distinction the store is asked to keep.
pub
// There is deliberately no `restored_time` twin here, unlike the seam this
// one is modelled on. The store never reads a timestamp back: expiry is a
// predicate the database evaluates, and the only instant a caller is told
// about is the one `issue` computed and still holds in memory. A conversion
// nothing calls is a conversion nothing tests.
pub use sql;
pub use sql;
pub use sql;