Учитывая код
struct NodeFragment{
char: String,
name: String,
cost: i32,
r#type: String
}
pub struct Node {
pub char_name: String,
pub node_name: String,
pub cp_cost: i32,
pub node_type: NodeType,
}
impl From<Node> for NodeFragment{
fn from(value: Node) -> Self {
NodeFragment{ char: value.char_name, name: value.node_name, cost: value.cp_cost, r#type: value.node_type.to_string() }
}
}
impl From<Vec<Node>> for NodeFragment{
fn from(value: Vec<Node>) -> Vec<NodeFragment> {
//foreach mapping value to Vec<NodeFragment>
vec![]
}
}
Я получаю эту ошибку:
method `from` has an incompatible type for trait
expected signature `fn(Vec<_>) -> NodeFragment`
found signature `fn(Vec<_>) -> Vec<NodeFragment>`rustcClick for full compiler diagnostic
main.rs(34, 34): change the output type to match the trait: `NodeFragment`
Как мне реализовать метод для Vec<Node>, чтобы получить Vec<NodeFragment>?
Я предполагаю, что концепция from Trait заключается в том, что я преобразую тип A в тип B. Сообщение об ошибке выше не дает мне никаких подробностей. Разве нельзя реализовать from для Vec Type за пределами крейта Vec?

Сообщение об ошибке довольно явно: при реализации From для типа U требуемая подпись метода from — fn (T) -> U.
В вашем случае T = Vec<Node> и U = NodeFragment, поэтому требуемый метод — fn from(value: Vec<Node>) -> NodeFragment.
То, что вы пытаетесь сделать, потребует T = Vec<Node> и U = Vec<NodeFragment>, но вы не можете реализовать внешний признак (std::convert::From) в иностранном типе (std::vec::Vec).
Вы не можете использовать признак From для реализации своего метода преобразования, и для этого вам следует полагаться на собственный метод/типаж.
Если у вас есть
impl From<Node> for NodeFragment {}, вы можете создать преобразованиеVec<Node> -> Vec<NodeFragment>, поместив.into_iter().map(NodeFragment::from).collect::<Vec<_>>()на свой век узлов.