rule Rss2Atom 
	transform r : RSS!t_rss
	to f : Atom!t_feed {
	
	Atom.root = f;
	f.appendChildren(r.e_channel.c_item.equivalent());	
}

@lazy
rule Item2Entry
	transform i : RSS!t_item
	to e : Atom!t_entry {
	
	e.appendEquivalentsOfChildrenOf(i);
}

@lazy
rule Title2Title
	transform s : RSS!t_title
	to t : Atom!t_title {
	
	t.text = s.text;
}

@lazy
rule Link2Link
	transform s : RSS!t_link
	to t : Atom!t_link {
	
	t.a_href = s.text;
}

@lazy
rule Generator2Generator
	transform s : RSS!t_generator
	to t : Atom!t_generator {
	
	t.a_href = s.text;
}

@lazy
rule Creator2Author 
	transform c : RSS!`t_dc:creator`
	to a : Atom!t_author {
	
	a.appendChild(new Atom!t_name);
	a.e_name.text = c.text;	
}

@lazy
rule Description2Summary
	transform d : RSS!t_description
	to s : Atom!t_summary {
	
	s.text = d.text;	
}

@lazy
rule ContentEncoded2Content 
	transform s : RSS!`t_content:encoded`
	to t : Atom!t_content {
	
	t.text = s.text;
}

@lazy
rule PubDate2Published 
	transform s : RSS!t_pubDate
	to t : Atom!t_published {
	
	t.text = s.text;
	
}

operation Any appendChildren(c : Collection) {
	for (child in c) {
		self.appendChild(child);
	}
}

operation Any appendEquivalentsOfChildrenOf(source : Any) {
	for (child in source.children) {
		var e = child.equivalent();
		if (e.isDefined()) {
			self.appendChild(e);
		}
	}
}
