2025/5/12
todo_done.icon 設計図を部品とその処理も明記して描く
https://scrapbox.io/files/68216b612999f7308e8f507a.png
UI process
Tauriのコア部分
domain code
UIからもEngineからも利用されるdomain。このシステムの中枢。
ビジネスロジックはすべてここに詰める
engine process
ブロックし続ける役割を担ったプロセス。
domainからブロック対象のデータをもらって、その対象をブロックし続ける。
blocker threads
engineはマネージャー的な役割であり、blockを実際に実現するのは各々のblockerたち。
どうblockするのかは各々次第だが、いずれにせ役割を果たしてくれればいい。
engineは彼らにblock対象を与え、そして常に動かし続ける役割がある。
todo_done.icon domain部分を設計する
少し迷走中onigiri.w2.icon
Targetの扱いに迷っている。
Url系のターゲットをどうすればいいか
scheme無しの形で受け取っても良いし、ドメインだけで受け取っても効果ありにしたい。
普通のurlという形だとスキーマが必須になるので何か違う。
迷わなくていい。今必要十分なデータ型だけ作りなさい。
NetworkEndpointくらいだろ必要なのは。それ以外は後で考えよう。
まずは全体を作りにいけ。細かいところはそこからだ。
もっとサクサク作りたいのにな。その方法が見つからない。
設計からやった方がいいことは確かなんだけど。一緒のような気がして。
設計って言ってもどうすればいいのかよくわからんしな。
code: model.rs
use chrono::{DateTime, Utc};
struct BlockRule {
id: BlockRuleId,
name: String,
definition: BlockRuleDefinition,
state: BlockRuleState,
}
struct BlockRuleId(String);
enum BlockRuleState {
Active(bool, DateTime<Utc>),
Inactive(bool),
}
enum BlockTarget {
NetworkEndpoint(String),
Application(String),
}
trait BlockCriteria {
fn evaluate(&self, context: &BlockContext) -> bool;
}
struct BlockRuleDefinition {
targets: Vec<BlockTarget>,
criteria: Box<dyn BlockCriteria>,
fn evaluate_targets(&self, context: &BlockContext) -> Vec<BlockTarget>;
}
struct BlockContext {
current_time: DateTime<Utc>,
}
struct BlockContextManager {
id: String,
fn create_current_context() -> BlockContext;
}
struct BlockTargetResolver {
rules: Vec<BlockRuleDefinition>,
fn resolve_targets(&self, context: &BlockContext) -> Vec<BlockTarget>;
}
todo.icon プロセスリスタートの部分を実装する
todo.icon とりあえず、NextJSでデザインだけサクッと作ってみる