🔧 Phase A: Add share_box() method to NyashBox trait and all Box implementations

Co-authored-by: moe-charm <217100418+moe-charm@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-08-15 04:29:41 +00:00
parent a59fe089dd
commit cdcfa98dd1
36 changed files with 250 additions and 0 deletions

View File

@ -87,6 +87,9 @@ pub trait NyashBox: BoxCore + Debug {
/// Clone this box (equivalent to Python's copy()) /// Clone this box (equivalent to Python's copy())
fn clone_box(&self) -> Box<dyn NyashBox>; fn clone_box(&self) -> Box<dyn NyashBox>;
/// Share this box (state-preserving reference sharing)
fn share_box(&self) -> Box<dyn NyashBox>;
/// Arc参照を返す新しいcloneメソッド参照共有 /// Arc参照を返す新しいcloneメソッド参照共有
fn clone_arc(&self) -> SharedNyashBox { fn clone_arc(&self) -> SharedNyashBox {
Arc::from(self.clone_box()) Arc::from(self.clone_box())

View File

@ -283,6 +283,11 @@ impl NyashBox for ArrayBox {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
fn to_string_box(&self) -> StringBox { fn to_string_box(&self) -> StringBox {
let items = self.items.read().unwrap(); let items = self.items.read().unwrap();
let strings: Vec<String> = items.iter() let strings: Vec<String> = items.iter()

View File

@ -304,6 +304,12 @@ impl BoxCore for AudioBox {
impl NyashBox for AudioBox { impl NyashBox for AudioBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -83,10 +83,17 @@ impl NyashBox for BoolBox {
"BoolBox" "BoolBox"
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
}
} }

View File

@ -194,6 +194,11 @@ impl NyashBox for BufferBox {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
fn to_string_box(&self) -> StringBox { fn to_string_box(&self) -> StringBox {
let data = self.data.read().unwrap(); let data = self.data.read().unwrap();
StringBox::new(format!("BufferBox({} bytes)", data.len())) StringBox::new(format!("BufferBox({} bytes)", data.len()))

View File

@ -272,6 +272,12 @@ impl BoxCore for CanvasEventBox {
impl NyashBox for CanvasEventBox { impl NyashBox for CanvasEventBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -282,6 +282,12 @@ impl BoxCore for CanvasLoopBox {
impl NyashBox for CanvasLoopBox { impl NyashBox for CanvasLoopBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -121,6 +121,12 @@ impl NyashBox for ConsoleBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -195,6 +201,12 @@ impl NyashBox for ConsoleBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -377,6 +377,12 @@ impl NyashBox for DebugBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -154,6 +154,12 @@ impl NyashBox for EguiBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -134,6 +134,12 @@ impl BoxCore for FileBox {
impl NyashBox for FileBox { impl NyashBox for FileBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
// Note: Cannot truly clone a File handle, so create a new one to the same path // Note: Cannot truly clone a File handle, so create a new one to the same path
match FileBox::open(&self.path) { match FileBox::open(&self.path) {
Ok(new_file) => Box::new(new_file), Ok(new_file) => Box::new(new_file),

View File

@ -73,6 +73,12 @@ impl NyashFutureBox {
impl NyashBox for NyashFutureBox { impl NyashBox for NyashFutureBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -49,6 +49,12 @@ impl HttpClientBox {
impl NyashBox for HttpClientBox { impl NyashBox for HttpClientBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -193,6 +193,12 @@ impl HTTPRequestBox {
impl NyashBox for HTTPRequestBox { impl NyashBox for HTTPRequestBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -371,6 +377,12 @@ impl HTTPResponseBox {
impl NyashBox for HTTPResponseBox { impl NyashBox for HTTPResponseBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -365,6 +365,12 @@ impl HTTPServerBox {
impl NyashBox for HTTPServerBox { impl NyashBox for HTTPServerBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -79,10 +79,17 @@ impl NyashBox for IntegerBox {
"IntegerBox" "IntegerBox"
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
}
} }

View File

@ -97,6 +97,12 @@ impl IntentBox {
impl NyashBox for IntentBox { impl NyashBox for IntentBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -173,6 +173,12 @@ impl std::fmt::Display for JSONBox {
impl NyashBox for JSONBox { impl NyashBox for JSONBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -269,10 +269,17 @@ impl NyashBox for MapBox {
StringBox::new(&format!("MapBox(size={})", size)) StringBox::new(&format!("MapBox(size={})", size))
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
}
fn equals(&self, other: &dyn NyashBox) -> BoolBox { fn equals(&self, other: &dyn NyashBox) -> BoolBox {
if let Some(other_map) = other.as_any().downcast_ref::<MapBox>() { if let Some(other_map) = other.as_any().downcast_ref::<MapBox>() {
// 同じインスタンスかチェック(データの共有を考慮) // 同じインスタンスかチェック(データの共有を考慮)

View File

@ -314,6 +314,12 @@ impl NyashBox for MathBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -381,6 +387,12 @@ impl NyashBox for FloatBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -474,6 +486,12 @@ impl NyashBox for RangeBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -166,6 +166,12 @@ impl NyashBox for NullBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -153,6 +153,12 @@ impl P2PBox {
impl NyashBox for P2PBox { impl NyashBox for P2PBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -307,6 +307,12 @@ impl BoxCore for QRBox {
impl NyashBox for QRBox { impl NyashBox for QRBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -267,6 +267,12 @@ impl NyashBox for RandomBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -83,6 +83,12 @@ impl RegexBox {
impl NyashBox for RegexBox { impl NyashBox for RegexBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -38,6 +38,12 @@ impl NyashResultBox {
impl NyashBox for NyashResultBox { impl NyashBox for NyashResultBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
match self { match self {
NyashResultBox::Ok(val) => Box::new(NyashResultBox::Ok(val.clone_box())), NyashResultBox::Ok(val) => Box::new(NyashResultBox::Ok(val.clone_box())),
NyashResultBox::Err(err) => Box::new(NyashResultBox::Err(err.clone_box())), NyashResultBox::Err(err) => Box::new(NyashResultBox::Err(err.clone_box())),

View File

@ -231,6 +231,12 @@ impl NyashBox for SimpleIntentBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -385,6 +385,11 @@ impl NyashBox for SocketBox {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
fn to_string_box(&self) -> StringBox { fn to_string_box(&self) -> StringBox {
eprintln!("🔥 SOCKETBOX to_string_box() called - Socket ID = {}", self.base.id); eprintln!("🔥 SOCKETBOX to_string_box() called - Socket ID = {}", self.base.id);
eprintln!("🔥 RwLock pointer = {:p}", &self.is_server); eprintln!("🔥 RwLock pointer = {:p}", &self.is_server);

View File

@ -323,6 +323,12 @@ impl NyashBox for SoundBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -137,6 +137,12 @@ impl NyashStreamBox {
impl NyashBox for NyashStreamBox { impl NyashBox for NyashStreamBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -147,10 +147,17 @@ impl NyashBox for StringBox {
"StringBox" "StringBox"
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
Box::new(self.clone()) Box::new(self.clone())
} }
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
}
} }

View File

@ -197,6 +197,12 @@ impl NyashBox for TimeBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -368,6 +374,12 @@ impl NyashBox for DateTimeBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }
@ -452,6 +464,12 @@ impl NyashBox for TimerBox {
} }
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -215,6 +215,12 @@ impl BoxCore for TimerBox {
impl NyashBox for TimerBox { impl NyashBox for TimerBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -284,6 +284,12 @@ impl BoxCore for WebCanvasBox {
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
impl NyashBox for WebCanvasBox { impl NyashBox for WebCanvasBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -161,6 +161,12 @@ impl BoxCore for WebConsoleBox {
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
impl NyashBox for WebConsoleBox { impl NyashBox for WebConsoleBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }

View File

@ -154,6 +154,12 @@ impl BoxCore for WebDisplayBox {
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
impl NyashBox for WebDisplayBox { impl NyashBox for WebDisplayBox {
fn clone_box(&self) -> Box<dyn NyashBox> { fn clone_box(&self) -> Box<dyn NyashBox> {
/// 仮実装: clone_boxと同じ後で修正
fn share_box(&self) -> Box<dyn NyashBox> {
self.clone_box()
}
Box::new(self.clone()) Box::new(self.clone())
} }