blob: da30a9cbf705c5705ae78cd39e31e4a8c473a017 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//! Main entry point for the font service.
#![warn(missing_docs)]
mod font_service;
use {
self::font_service::{FontServiceBuilder, ProviderRequestStream},
anyhow::Error,
fuchsia_async as fasync,
fuchsia_component::server::ServiceFs,
fuchsia_syslog::{self as syslog, *},
getopts,
std::path::PathBuf,
};
const FONT_MANIFEST_PATH: &str = "/pkg/data/manifest.json";
const VENDOR_FONT_MANIFEST_PATH: &str = "/config/data/fonts/manifest.json";
#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
syslog::init_with_tags(&["fonts"])?;
let mut opts = getopts::Options::new();
opts.optflag("h", "help", "")
.optmulti(
"m",
"font-manifest",
"Load fonts from the specified font manifest file.",
"MANIFEST",
)
.optflag("n", "no-default-fonts", "Don't load fonts from default location.");
let args: Vec<String> = std::env::args().collect();
let options = opts.parse(args)?;
let mut service_builder = FontServiceBuilder::new();
if !options.opt_present("n") {
let font_manifest_path = PathBuf::from(FONT_MANIFEST_PATH);
service_builder.add_manifest_from_file(&font_manifest_path);
let font_manifest_path = PathBuf::from(VENDOR_FONT_MANIFEST_PATH);
if font_manifest_path.exists() {
service_builder.add_manifest_from_file(&font_manifest_path);
}
} else {
fx_vlog!(1, "no-default-fonts set, not loading fonts from default location");
}
for m in options.opt_strs("m") {
let path_buf = PathBuf::from(m.as_str());
service_builder.add_manifest_from_file(&path_buf);
}
let service = service_builder.build().await?;
fx_vlog!(1, "Adding FIDL services");
let mut fs = ServiceFs::new();
fs.dir("svc")
.add_fidl_service(ProviderRequestStream::Stable)
.add_fidl_service(ProviderRequestStream::Experimental);
fs.take_and_serve_directory_handle()?;
let fs = fs;
service.run(fs).await;
Ok(())
}