r2048 0.1.0

2048 written in rust
Documentation
use rusqlite::{Connection, Result, params};

#[derive(Debug)]
pub struct Score {
    conn: Connection,
}

impl Score {
    pub fn new() -> Result<Self> {
        let conn = Connection::open("r2048.db")?;

        conn.execute(
            "CREATE TABLE IF NOT EXISTS data (
                id INTEGER PRIMARY KEY CHECK (id = 1),
                score INTEGER NOT NULL
            )",
            [],
        )?;

        Ok(Self { conn })
    }

    #[inline(always)]
    pub fn update_score(&self, new_score: u32) -> Result<()> {
        let current_high: u32 = self
            .conn
            .query_row("SELECT score FROM data WHERE id = 1", [], |row| row.get(0))
            .unwrap_or(0);

        if new_score > current_high {
            self.conn.execute(
                "INSERT INTO data (id, score) VALUES (1, ?1)
                 ON CONFLICT(id) DO UPDATE SET score = excluded.score",
                params![new_score],
            )?;
        }

        Ok(())
    }

    #[inline(always)]
    pub fn get_score(&self) -> Result<u32> {
        let score = self
            .conn
            .query_row("SELECT score FROM data WHERE id = 1", [], |row| row.get(0))
            .unwrap_or(0);
        Ok(score)
    }
}