targets = ["ssr"]
[app]
name = "pokemon-card-store"
app_id = "rs.fission.examples.pokemon_card_store"
[server]
entry = "pokemon_card_store::pokemon_card_store_server"
default_route_mode = "server_private"
render_pass_limit = 4
[server.cache]
provider = "moka"
max_capacity = 10000
[server.workers]
separate_artifacts = true
bridge = "generated"
[server.islands]
separate_artifacts = true
preload = "route"
Check | Expected result |
|---|---|
Build | cargo check or the relevant fission command finishes without target-specific configuration errors. |
Behavior | The screen, package, server route, or test flow described by the recipe is visible and responds to input. |
Failure path | At least one denied, missing, invalid, or empty case renders a useful message instead of silently doing nothing. |
Next link | The reference page linked from the recipe explains the exact fields, commands, or types used here. |
#[derive(Clone, Debug)]
pub struct CardProduct {
pub id: u32,
pub name: String,
pub set: String,
pub price_pence: u32,
pub stock: u32,
pub image_url: String,
}
pub fn catalog_response() -> Vec<CardProduct> {
vec![
CardProduct {
id: 1,
name: "Pikachu Illustrator".to_string(),
set: "Promo".to_string(),
price_pence: 125000,
stock: 1,
image_url: "/img/cards/pikachu.svg".to_string(),
},
]
}
pub const CATALOG_JOB: &str = "catalog";
let jobs = ServerJobRegistry::new().register_job(CATALOG_JOB, |_request, _ctx| {
Ok(catalog_response())
});
#[derive(Clone)]
pub struct StoreHomePage;
impl From<StoreHomePage> for Widget {
fn from(component: StoreHomePage) -> Self {
let (_, view) = fission::build::current::<StoreState>();
Column {
gap: Some(24.0),
children: vec![
Text::new("Pokémon Card Store")
.size(44.0)
.weight(FontWeight::Bold)
.into(),
CardGrid::new(view.state().products.clone()).into(),
],
..Default::default()
}
.into()
}
}
.worker(
"/",
ProgressiveWorker::new("catalog-filters", "/assets/workers/catalog-filters.wasm")
.entry("pokemon_card_store::workers::catalog_filters_boot")
.root_node_id("catalog-grid"),
)
.island(
"/",
WasmIsland::new("cart-drawer", "/assets/islands/cart-drawer.wasm", "cart-drawer")
.entry("pokemon_card_store::islands::cart_drawer_boot"),
)
fission server check --project-dir examples/pokemon-card-store
fission server artifacts --project-dir examples/pokemon-card-store
fission server serve --project-dir examples/pokemon-card-store --host 127.0.0.1 --port 8124
[package.docker]
port = 8080
tags = ["ghcr.io/example/pokemon-card-store:0.1.0"]
[distribution.docker_registry.production]
tags = ["ghcr.io/example/pokemon-card-store:0.1.0"]
fission package --project-dir examples/pokemon-card-store --target ssr --format docker-image --release
fission publish --project-dir examples/pokemon-card-store --provider docker-registry --artifact target/fission/release/ssr/docker-image/artifact-manifest.json --site production