1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-01 00:35:46 +03:00

lua: use to_lua_value for wezterm.font

This is now more type-safe and clearer to read.
This commit is contained in:
Wez Furlong 2020-02-29 22:04:34 -08:00
parent fa01ca59ca
commit 8b9fcd3063
5 changed files with 29 additions and 14 deletions

View File

@ -41,7 +41,7 @@ impl Default for FontAntiAliasing {
} }
} }
#[derive(Debug, Deserialize, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
pub struct FontAttributes { pub struct FontAttributes {
/// The font family name /// The font family name
pub family: String, pub family: String,
@ -74,7 +74,7 @@ impl Default for FontAttributes {
} }
/// Represents textual styling. /// Represents textual styling.
#[derive(Debug, Deserialize, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
pub struct TextStyle { pub struct TextStyle {
#[serde(default)] #[serde(default)]
pub font: Vec<FontAttributes>, pub font: Vec<FontAttributes>,

View File

@ -9,7 +9,7 @@ use crate::keyassignment::KeyAssignment;
use anyhow::{anyhow, bail, Context, Error}; use anyhow::{anyhow, bail, Context, Error};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use portable_pty::{CommandBuilder, PtySize}; use portable_pty::{CommandBuilder, PtySize};
use serde::Deserialize; use serde::{Deserialize, Serialize};
use std; use std;
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryInto; use std::convert::TryInto;

View File

@ -1,5 +1,5 @@
use anyhow::anyhow; use anyhow::anyhow;
use mlua::{Lua, Table}; use mlua::{Lua, Table, Value};
use std::path::Path; use std::path::Path;
mod serde_lua; mod serde_lua;
@ -122,17 +122,20 @@ fn hostname<'lua>(_: &'lua Lua, _: ()) -> mlua::Result<String> {
fn font_family<'lua>( fn font_family<'lua>(
lua: &'lua Lua, lua: &'lua Lua,
(family, map_defaults): (String, Option<Table<'lua>>), (family, map_defaults): (String, Option<Table<'lua>>),
) -> mlua::Result<Table<'lua>> { ) -> mlua::Result<Value<'lua>> {
let font_array = lua.create_table()?; use crate::config::{FontAttributes, TextStyle};
let font = lua.create_table()?;
font.set("family", family)?;
font_array.set(1, font)?;
let font_map = match map_defaults { let mut text_style: TextStyle = match map_defaults {
Some(tbl) => tbl, Some(def) => from_lua_value(Value::Table(def))?,
None => lua.create_table()?, None => TextStyle::default(),
}; };
font_map.set("font", font_array)?; text_style.font.clear();
Ok(font_map) text_style.font.push(FontAttributes {
family,
bold: false,
italic: false,
});
Ok(to_lua_value(lua, text_style)?)
} }

View File

@ -58,6 +58,12 @@ impl SerdeDeError for Error {
} }
} }
impl From<Error> for mlua::Error {
fn from(e: Error) -> mlua::Error {
mlua::Error::external(e)
}
}
#[derive(Debug)] #[derive(Debug)]
struct ValueWrapper<'lua>(Value<'lua>); struct ValueWrapper<'lua>(Value<'lua>);

View File

@ -24,6 +24,12 @@ impl Error {
} }
} }
impl From<Error> for mlua::Error {
fn from(e: Error) -> mlua::Error {
mlua::Error::external(e)
}
}
impl SerError for Error { impl SerError for Error {
fn custom<T: std::fmt::Display>(msg: T) -> Self { fn custom<T: std::fmt::Display>(msg: T) -> Self {
Error::Custom { Error::Custom {