(
mutation: &mut Mutation,
repo_link_repo_id: RepoId,
repo_link_meta: &LinkMetadataRow,
parent_topics: &Vec<ParentTopicRow>,
)
| 491 | } |
| 492 | |
| 493 | fn persist_links( |
| 494 | mutation: &mut Mutation, |
| 495 | repo_link_repo_id: RepoId, |
| 496 | repo_link_meta: &LinkMetadataRow, |
| 497 | parent_topics: &Vec<ParentTopicRow>, |
| 498 | ) -> Result<()> { |
| 499 | let repo_link = RepoLink { |
| 500 | api_version: API_VERSION.to_string(), |
| 501 | metadata: RepoLinkMetadata::try_from(repo_link_meta).unwrap(), |
| 502 | parent_topics: BTreeSet::new(), |
| 503 | }; |
| 504 | |
| 505 | let mut repo_links = RepoLinks::new(repo_link_repo_id, repo_link); |
| 506 | |
| 507 | for parent in parent_topics { |
| 508 | let parent_repo_id = RepoId::try_from(&parent.repository_id).unwrap(); |
| 509 | let repo_id = prefer_private_repo(repo_link_repo_id, parent_repo_id); |
| 510 | let reference = repo_links.get_mut(repo_id); |
| 511 | reference.parent_topics.insert(parent.try_into().unwrap()); |
| 512 | } |
| 513 | |
| 514 | let repo_ids = repo_links.links.keys().cloned().collect::<Vec<RepoId>>(); |
| 515 | |
| 516 | for repo_id in repo_ids { |
| 517 | let link = repo_links.get_mut(repo_id); |
| 518 | persist_link(mutation, repo_id, link, parent_topics).unwrap(); |
| 519 | } |
| 520 | |
| 521 | Ok(()) |
| 522 | } |
| 523 | |
| 524 | async fn export_links(mutation: &mut Mutation, pool: &PgPool) -> Result<()> { |
| 525 | log::info!("saving link blobs"); |
no test coverage detected